@sunggang/ui-lib 0.4.51 → 0.4.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LiffProvider.cjs.js +149 -29
- package/LiffProvider.esm.js +149 -29
- package/package.json +1 -1
- package/src/lib/Provider/LiffProvider.d.ts +2 -1
package/LiffProvider.cjs.js
CHANGED
|
@@ -460,10 +460,13 @@ var LiffProvider = function(param) {
|
|
|
460
460
|
var _useState2 = _sliced_to_array(React.useState(null), 2), liffError = _useState2[0], setLiffError = _useState2[1];
|
|
461
461
|
var _useState3 = _sliced_to_array(React.useState(null), 2), loginData = _useState3[0], setLoginData = _useState3[1];
|
|
462
462
|
var _useState4 = _sliced_to_array(React.useState(null), 2), userInfo = _useState4[0], setUserInfo = _useState4[1];
|
|
463
|
-
var _useState5 = _sliced_to_array(React.useState(null), 2),
|
|
464
|
-
var _useState6 = _sliced_to_array(React.useState(null), 2),
|
|
463
|
+
var _useState5 = _sliced_to_array(React.useState(null), 2), liffProfile = _useState5[0], setLiffProfile = _useState5[1];
|
|
464
|
+
var _useState6 = _sliced_to_array(React.useState(null), 2), isFriendship = _useState6[0], setFriendship = _useState6[1];
|
|
465
|
+
var _useState7 = _sliced_to_array(React.useState(null), 2), loginType = _useState7[0], setLoginType = _useState7[1];
|
|
465
466
|
// userInfo 的 localStorage key
|
|
466
467
|
var userInfoStorageKey = "".concat(localStorageKey, "-userInfo");
|
|
468
|
+
// liff profile 的 localStorage key
|
|
469
|
+
var liffUserInfoStorageKey = "".concat(localStorageKey, "-liffUserInfo");
|
|
467
470
|
// 從 localStorage 載入 userInfo
|
|
468
471
|
var loadUserInfoFromStorage = function() {
|
|
469
472
|
try {
|
|
@@ -486,6 +489,55 @@ var LiffProvider = function(param) {
|
|
|
486
489
|
console.error("儲存 userInfo 失敗:", err);
|
|
487
490
|
}
|
|
488
491
|
};
|
|
492
|
+
// 從 localStorage 載入 LIFF profile
|
|
493
|
+
var loadLiffUserInfoFromStorage = function() {
|
|
494
|
+
try {
|
|
495
|
+
var stored = window.localStorage.getItem(liffUserInfoStorageKey);
|
|
496
|
+
if (stored) {
|
|
497
|
+
var parsed = JSON.parse(stored);
|
|
498
|
+
setLiffProfile(parsed);
|
|
499
|
+
return parsed;
|
|
500
|
+
}
|
|
501
|
+
} catch (err) {
|
|
502
|
+
console.error("載入 liffUserInfo 失敗:", err);
|
|
503
|
+
}
|
|
504
|
+
return null;
|
|
505
|
+
};
|
|
506
|
+
// 儲存 LIFF profile 到 localStorage
|
|
507
|
+
var saveLiffUserInfoToStorage = function(info) {
|
|
508
|
+
try {
|
|
509
|
+
window.localStorage.setItem(liffUserInfoStorageKey, JSON.stringify(info));
|
|
510
|
+
} catch (err) {
|
|
511
|
+
console.error("儲存 liffUserInfo 失敗:", err);
|
|
512
|
+
}
|
|
513
|
+
};
|
|
514
|
+
// 移除 LIFF profile 的 localStorage
|
|
515
|
+
var removeLiffUserInfoFromStorage = function() {
|
|
516
|
+
try {
|
|
517
|
+
window.localStorage.removeItem(liffUserInfoStorageKey);
|
|
518
|
+
} catch (err) {
|
|
519
|
+
// ignore
|
|
520
|
+
}
|
|
521
|
+
};
|
|
522
|
+
// 移除 LIFF initialized flag
|
|
523
|
+
var removeLiffInitializedFromStorage = function() {
|
|
524
|
+
try {
|
|
525
|
+
window.localStorage.removeItem("".concat(localStorageKey, "-liffInitialized"));
|
|
526
|
+
} catch (err) {
|
|
527
|
+
// ignore
|
|
528
|
+
}
|
|
529
|
+
};
|
|
530
|
+
// 清除 LIFF 相關快取與狀態(暴露給外部 as needed)
|
|
531
|
+
var clearLiffData = function() {
|
|
532
|
+
try {
|
|
533
|
+
removeLiffUserInfoFromStorage();
|
|
534
|
+
removeLiffInitializedFromStorage();
|
|
535
|
+
} catch (e) {
|
|
536
|
+
// ignore
|
|
537
|
+
}
|
|
538
|
+
setLiffProfile(null);
|
|
539
|
+
setLiffObject(null);
|
|
540
|
+
};
|
|
489
541
|
var fetchMemberInfo = function() {
|
|
490
542
|
var _ref = _async_to_generator(function(token) {
|
|
491
543
|
var response, err;
|
|
@@ -594,6 +646,12 @@ var LiffProvider = function(param) {
|
|
|
594
646
|
// token 無效時清除 userInfo
|
|
595
647
|
setUserInfo(null);
|
|
596
648
|
window.localStorage.removeItem(userInfoStorageKey);
|
|
649
|
+
// 使用統一清理方法清除 LIFF 快取與初始化標記
|
|
650
|
+
try {
|
|
651
|
+
clearLiffData();
|
|
652
|
+
} catch (e) {
|
|
653
|
+
// ignore
|
|
654
|
+
}
|
|
597
655
|
return [
|
|
598
656
|
3,
|
|
599
657
|
7
|
|
@@ -673,8 +731,14 @@ var LiffProvider = function(param) {
|
|
|
673
731
|
6
|
|
674
732
|
];
|
|
675
733
|
case 5:
|
|
734
|
+
// 登入沒有回傳 token,視為登入失敗 — 清除 LIFF 快取
|
|
676
735
|
setUserInfo(response);
|
|
677
736
|
saveUserInfoToStorage(response);
|
|
737
|
+
try {
|
|
738
|
+
clearLiffData();
|
|
739
|
+
} catch (e) {
|
|
740
|
+
// ignore
|
|
741
|
+
}
|
|
678
742
|
if (handleLoginError) handleLoginError();
|
|
679
743
|
_state.label = 6;
|
|
680
744
|
case 6:
|
|
@@ -703,15 +767,15 @@ var LiffProvider = function(param) {
|
|
|
703
767
|
// 初始化 LIFF
|
|
704
768
|
var initializeLiff = function() {
|
|
705
769
|
var _ref = _async_to_generator(function(isValid) {
|
|
706
|
-
var customFetch, liff, originalFetch, lineToken, redirectUri, tempFriendship, friendship, friendFlag, error, err;
|
|
770
|
+
var customFetch, liff, originalFetch, storedProfileExists, profile, profileErr, lineToken, redirectUri, tempFriendship, friendship, friendFlag, error, err;
|
|
707
771
|
return _ts_generator(this, function(_state) {
|
|
708
772
|
switch(_state.label){
|
|
709
773
|
case 0:
|
|
710
774
|
_state.trys.push([
|
|
711
775
|
0,
|
|
712
|
-
|
|
776
|
+
15,
|
|
713
777
|
,
|
|
714
|
-
|
|
778
|
+
16
|
|
715
779
|
]);
|
|
716
780
|
customFetch = // 自訂 fetch 函數,避免每次請求都改變 URL
|
|
717
781
|
// eslint-disable-next-line no-inner-declarations
|
|
@@ -741,6 +805,54 @@ var LiffProvider = function(param) {
|
|
|
741
805
|
_state.sent();
|
|
742
806
|
console.log("LIFF init succeeded.");
|
|
743
807
|
setLiffObject(liff);
|
|
808
|
+
// 如果 localStorage 或 state 已有 profile,就跳過重複呼叫
|
|
809
|
+
storedProfileExists = false;
|
|
810
|
+
try {
|
|
811
|
+
storedProfileExists = !!window.localStorage.getItem(liffUserInfoStorageKey);
|
|
812
|
+
} catch (e) {
|
|
813
|
+
storedProfileExists = false;
|
|
814
|
+
}
|
|
815
|
+
if (!(!storedProfileExists && !liffProfile)) return [
|
|
816
|
+
3,
|
|
817
|
+
7
|
|
818
|
+
];
|
|
819
|
+
_state.label = 3;
|
|
820
|
+
case 3:
|
|
821
|
+
_state.trys.push([
|
|
822
|
+
3,
|
|
823
|
+
5,
|
|
824
|
+
,
|
|
825
|
+
6
|
|
826
|
+
]);
|
|
827
|
+
return [
|
|
828
|
+
4,
|
|
829
|
+
liff.getProfile()
|
|
830
|
+
];
|
|
831
|
+
case 4:
|
|
832
|
+
profile = _state.sent();
|
|
833
|
+
setLiffProfile(profile);
|
|
834
|
+
saveLiffUserInfoToStorage(profile);
|
|
835
|
+
return [
|
|
836
|
+
3,
|
|
837
|
+
6
|
|
838
|
+
];
|
|
839
|
+
case 5:
|
|
840
|
+
profileErr = _state.sent();
|
|
841
|
+
console.warn("取得 LIFF profile 失敗(非致命):", profileErr);
|
|
842
|
+
return [
|
|
843
|
+
3,
|
|
844
|
+
6
|
|
845
|
+
];
|
|
846
|
+
case 6:
|
|
847
|
+
return [
|
|
848
|
+
3,
|
|
849
|
+
8
|
|
850
|
+
];
|
|
851
|
+
case 7:
|
|
852
|
+
// 已有快取,跳過呼叫
|
|
853
|
+
console.log("跳過 liff.getProfile():已由 localStorage 或 state 取得 profile");
|
|
854
|
+
_state.label = 8;
|
|
855
|
+
case 8:
|
|
744
856
|
lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
|
|
745
857
|
// 未登入先進行登入
|
|
746
858
|
if (!liff.isLoggedIn()) {
|
|
@@ -763,21 +875,21 @@ var LiffProvider = function(param) {
|
|
|
763
875
|
tempFriendship = null;
|
|
764
876
|
if (!lineToken) return [
|
|
765
877
|
3,
|
|
766
|
-
|
|
878
|
+
14
|
|
767
879
|
];
|
|
768
|
-
_state.label =
|
|
769
|
-
case
|
|
880
|
+
_state.label = 9;
|
|
881
|
+
case 9:
|
|
770
882
|
_state.trys.push([
|
|
771
|
-
|
|
772
|
-
|
|
883
|
+
9,
|
|
884
|
+
11,
|
|
773
885
|
,
|
|
774
|
-
|
|
886
|
+
12
|
|
775
887
|
]);
|
|
776
888
|
return [
|
|
777
889
|
4,
|
|
778
890
|
liff.getFriendship()
|
|
779
891
|
];
|
|
780
|
-
case
|
|
892
|
+
case 10:
|
|
781
893
|
friendship = _state.sent();
|
|
782
894
|
friendFlag = friendship === null || friendship === void 0 ? void 0 : friendship.friendFlag;
|
|
783
895
|
setFriendship(friendFlag);
|
|
@@ -785,16 +897,16 @@ var LiffProvider = function(param) {
|
|
|
785
897
|
console.log("isFriendship", friendFlag);
|
|
786
898
|
return [
|
|
787
899
|
3,
|
|
788
|
-
|
|
900
|
+
12
|
|
789
901
|
];
|
|
790
|
-
case
|
|
902
|
+
case 11:
|
|
791
903
|
error = _state.sent();
|
|
792
904
|
console.error("Error in liff.getFriendship():", error);
|
|
793
905
|
return [
|
|
794
906
|
3,
|
|
795
|
-
|
|
907
|
+
12
|
|
796
908
|
];
|
|
797
|
-
case
|
|
909
|
+
case 12:
|
|
798
910
|
console.log("isValid", isValid);
|
|
799
911
|
if (tempFriendship && isValid) return [
|
|
800
912
|
2
|
|
@@ -803,23 +915,23 @@ var LiffProvider = function(param) {
|
|
|
803
915
|
4,
|
|
804
916
|
loginInit(lineToken)
|
|
805
917
|
];
|
|
806
|
-
case
|
|
918
|
+
case 13:
|
|
807
919
|
_state.sent();
|
|
808
|
-
_state.label =
|
|
809
|
-
case
|
|
920
|
+
_state.label = 14;
|
|
921
|
+
case 14:
|
|
810
922
|
return [
|
|
811
923
|
3,
|
|
812
|
-
|
|
924
|
+
16
|
|
813
925
|
];
|
|
814
|
-
case
|
|
926
|
+
case 15:
|
|
815
927
|
err = _state.sent();
|
|
816
928
|
setLiffError(err.toString());
|
|
817
929
|
console.log("LIFF init failed.", err);
|
|
818
930
|
return [
|
|
819
931
|
3,
|
|
820
|
-
|
|
932
|
+
16
|
|
821
933
|
];
|
|
822
|
-
case
|
|
934
|
+
case 16:
|
|
823
935
|
return [
|
|
824
936
|
2
|
|
825
937
|
];
|
|
@@ -976,6 +1088,12 @@ var LiffProvider = function(param) {
|
|
|
976
1088
|
setLoginType(null);
|
|
977
1089
|
setUserInfo(null);
|
|
978
1090
|
window.localStorage.removeItem(userInfoStorageKey);
|
|
1091
|
+
// 使用統一清理方法
|
|
1092
|
+
try {
|
|
1093
|
+
clearLiffData();
|
|
1094
|
+
} catch (e) {
|
|
1095
|
+
// ignore
|
|
1096
|
+
}
|
|
979
1097
|
console.warn("LIFF token 驗證失敗,需重新登入", err);
|
|
980
1098
|
return [
|
|
981
1099
|
2,
|
|
@@ -996,9 +1114,10 @@ var LiffProvider = function(param) {
|
|
|
996
1114
|
return trimmed.toLowerCase().startsWith("bearer ") ? trimmed : "Bearer ".concat(trimmed);
|
|
997
1115
|
};
|
|
998
1116
|
var searchParams = typeof window !== "undefined" ? new URLSearchParams(window.location.search) : null;
|
|
999
|
-
// 初始載入時從 localStorage 載入
|
|
1117
|
+
// 初始載入時從 localStorage 載入
|
|
1000
1118
|
React.useEffect(function() {
|
|
1001
1119
|
loadUserInfoFromStorage();
|
|
1120
|
+
loadLiffUserInfoFromStorage();
|
|
1002
1121
|
}, []);
|
|
1003
1122
|
// 客戶端初始化 LIFF
|
|
1004
1123
|
React.useEffect(function() {
|
|
@@ -1083,13 +1202,12 @@ var LiffProvider = function(param) {
|
|
|
1083
1202
|
userInfo: userInfo,
|
|
1084
1203
|
accessToken: accessToken,
|
|
1085
1204
|
liffError: liffError,
|
|
1086
|
-
initializeLiff: function() {
|
|
1087
|
-
return initializeLiff(false);
|
|
1088
|
-
},
|
|
1089
1205
|
isFriendship: isFriendship,
|
|
1090
1206
|
ensureLiffTokenValid: ensureLiffTokenValid,
|
|
1091
1207
|
accountLogin: accountLogin,
|
|
1092
|
-
loginType: loginType
|
|
1208
|
+
loginType: loginType,
|
|
1209
|
+
liffProfile: liffProfile,
|
|
1210
|
+
clearLiffData: clearLiffData
|
|
1093
1211
|
};
|
|
1094
1212
|
}, [
|
|
1095
1213
|
liffObject,
|
|
@@ -1100,7 +1218,9 @@ var LiffProvider = function(param) {
|
|
|
1100
1218
|
isFriendship,
|
|
1101
1219
|
ensureLiffTokenValid,
|
|
1102
1220
|
accountLogin,
|
|
1103
|
-
loginType
|
|
1221
|
+
loginType,
|
|
1222
|
+
liffProfile,
|
|
1223
|
+
clearLiffData
|
|
1104
1224
|
]);
|
|
1105
1225
|
return /*#__PURE__*/ jsxRuntime.jsx(LiffContext.Provider, {
|
|
1106
1226
|
value: contextValue,
|
package/LiffProvider.esm.js
CHANGED
|
@@ -456,10 +456,13 @@ var LiffProvider = function(param) {
|
|
|
456
456
|
var _useState2 = _sliced_to_array(useState(null), 2), liffError = _useState2[0], setLiffError = _useState2[1];
|
|
457
457
|
var _useState3 = _sliced_to_array(useState(null), 2), loginData = _useState3[0], setLoginData = _useState3[1];
|
|
458
458
|
var _useState4 = _sliced_to_array(useState(null), 2), userInfo = _useState4[0], setUserInfo = _useState4[1];
|
|
459
|
-
var _useState5 = _sliced_to_array(useState(null), 2),
|
|
460
|
-
var _useState6 = _sliced_to_array(useState(null), 2),
|
|
459
|
+
var _useState5 = _sliced_to_array(useState(null), 2), liffProfile = _useState5[0], setLiffProfile = _useState5[1];
|
|
460
|
+
var _useState6 = _sliced_to_array(useState(null), 2), isFriendship = _useState6[0], setFriendship = _useState6[1];
|
|
461
|
+
var _useState7 = _sliced_to_array(useState(null), 2), loginType = _useState7[0], setLoginType = _useState7[1];
|
|
461
462
|
// userInfo 的 localStorage key
|
|
462
463
|
var userInfoStorageKey = "".concat(localStorageKey, "-userInfo");
|
|
464
|
+
// liff profile 的 localStorage key
|
|
465
|
+
var liffUserInfoStorageKey = "".concat(localStorageKey, "-liffUserInfo");
|
|
463
466
|
// 從 localStorage 載入 userInfo
|
|
464
467
|
var loadUserInfoFromStorage = function() {
|
|
465
468
|
try {
|
|
@@ -482,6 +485,55 @@ var LiffProvider = function(param) {
|
|
|
482
485
|
console.error("儲存 userInfo 失敗:", err);
|
|
483
486
|
}
|
|
484
487
|
};
|
|
488
|
+
// 從 localStorage 載入 LIFF profile
|
|
489
|
+
var loadLiffUserInfoFromStorage = function() {
|
|
490
|
+
try {
|
|
491
|
+
var stored = window.localStorage.getItem(liffUserInfoStorageKey);
|
|
492
|
+
if (stored) {
|
|
493
|
+
var parsed = JSON.parse(stored);
|
|
494
|
+
setLiffProfile(parsed);
|
|
495
|
+
return parsed;
|
|
496
|
+
}
|
|
497
|
+
} catch (err) {
|
|
498
|
+
console.error("載入 liffUserInfo 失敗:", err);
|
|
499
|
+
}
|
|
500
|
+
return null;
|
|
501
|
+
};
|
|
502
|
+
// 儲存 LIFF profile 到 localStorage
|
|
503
|
+
var saveLiffUserInfoToStorage = function(info) {
|
|
504
|
+
try {
|
|
505
|
+
window.localStorage.setItem(liffUserInfoStorageKey, JSON.stringify(info));
|
|
506
|
+
} catch (err) {
|
|
507
|
+
console.error("儲存 liffUserInfo 失敗:", err);
|
|
508
|
+
}
|
|
509
|
+
};
|
|
510
|
+
// 移除 LIFF profile 的 localStorage
|
|
511
|
+
var removeLiffUserInfoFromStorage = function() {
|
|
512
|
+
try {
|
|
513
|
+
window.localStorage.removeItem(liffUserInfoStorageKey);
|
|
514
|
+
} catch (err) {
|
|
515
|
+
// ignore
|
|
516
|
+
}
|
|
517
|
+
};
|
|
518
|
+
// 移除 LIFF initialized flag
|
|
519
|
+
var removeLiffInitializedFromStorage = function() {
|
|
520
|
+
try {
|
|
521
|
+
window.localStorage.removeItem("".concat(localStorageKey, "-liffInitialized"));
|
|
522
|
+
} catch (err) {
|
|
523
|
+
// ignore
|
|
524
|
+
}
|
|
525
|
+
};
|
|
526
|
+
// 清除 LIFF 相關快取與狀態(暴露給外部 as needed)
|
|
527
|
+
var clearLiffData = function() {
|
|
528
|
+
try {
|
|
529
|
+
removeLiffUserInfoFromStorage();
|
|
530
|
+
removeLiffInitializedFromStorage();
|
|
531
|
+
} catch (e) {
|
|
532
|
+
// ignore
|
|
533
|
+
}
|
|
534
|
+
setLiffProfile(null);
|
|
535
|
+
setLiffObject(null);
|
|
536
|
+
};
|
|
485
537
|
var fetchMemberInfo = function() {
|
|
486
538
|
var _ref = _async_to_generator(function(token) {
|
|
487
539
|
var response, err;
|
|
@@ -590,6 +642,12 @@ var LiffProvider = function(param) {
|
|
|
590
642
|
// token 無效時清除 userInfo
|
|
591
643
|
setUserInfo(null);
|
|
592
644
|
window.localStorage.removeItem(userInfoStorageKey);
|
|
645
|
+
// 使用統一清理方法清除 LIFF 快取與初始化標記
|
|
646
|
+
try {
|
|
647
|
+
clearLiffData();
|
|
648
|
+
} catch (e) {
|
|
649
|
+
// ignore
|
|
650
|
+
}
|
|
593
651
|
return [
|
|
594
652
|
3,
|
|
595
653
|
7
|
|
@@ -669,8 +727,14 @@ var LiffProvider = function(param) {
|
|
|
669
727
|
6
|
|
670
728
|
];
|
|
671
729
|
case 5:
|
|
730
|
+
// 登入沒有回傳 token,視為登入失敗 — 清除 LIFF 快取
|
|
672
731
|
setUserInfo(response);
|
|
673
732
|
saveUserInfoToStorage(response);
|
|
733
|
+
try {
|
|
734
|
+
clearLiffData();
|
|
735
|
+
} catch (e) {
|
|
736
|
+
// ignore
|
|
737
|
+
}
|
|
674
738
|
if (handleLoginError) handleLoginError();
|
|
675
739
|
_state.label = 6;
|
|
676
740
|
case 6:
|
|
@@ -699,15 +763,15 @@ var LiffProvider = function(param) {
|
|
|
699
763
|
// 初始化 LIFF
|
|
700
764
|
var initializeLiff = function() {
|
|
701
765
|
var _ref = _async_to_generator(function(isValid) {
|
|
702
|
-
var customFetch, liff, originalFetch, lineToken, redirectUri, tempFriendship, friendship, friendFlag, error, err;
|
|
766
|
+
var customFetch, liff, originalFetch, storedProfileExists, profile, profileErr, lineToken, redirectUri, tempFriendship, friendship, friendFlag, error, err;
|
|
703
767
|
return _ts_generator(this, function(_state) {
|
|
704
768
|
switch(_state.label){
|
|
705
769
|
case 0:
|
|
706
770
|
_state.trys.push([
|
|
707
771
|
0,
|
|
708
|
-
|
|
772
|
+
15,
|
|
709
773
|
,
|
|
710
|
-
|
|
774
|
+
16
|
|
711
775
|
]);
|
|
712
776
|
customFetch = // 自訂 fetch 函數,避免每次請求都改變 URL
|
|
713
777
|
// eslint-disable-next-line no-inner-declarations
|
|
@@ -737,6 +801,54 @@ var LiffProvider = function(param) {
|
|
|
737
801
|
_state.sent();
|
|
738
802
|
console.log("LIFF init succeeded.");
|
|
739
803
|
setLiffObject(liff);
|
|
804
|
+
// 如果 localStorage 或 state 已有 profile,就跳過重複呼叫
|
|
805
|
+
storedProfileExists = false;
|
|
806
|
+
try {
|
|
807
|
+
storedProfileExists = !!window.localStorage.getItem(liffUserInfoStorageKey);
|
|
808
|
+
} catch (e) {
|
|
809
|
+
storedProfileExists = false;
|
|
810
|
+
}
|
|
811
|
+
if (!(!storedProfileExists && !liffProfile)) return [
|
|
812
|
+
3,
|
|
813
|
+
7
|
|
814
|
+
];
|
|
815
|
+
_state.label = 3;
|
|
816
|
+
case 3:
|
|
817
|
+
_state.trys.push([
|
|
818
|
+
3,
|
|
819
|
+
5,
|
|
820
|
+
,
|
|
821
|
+
6
|
|
822
|
+
]);
|
|
823
|
+
return [
|
|
824
|
+
4,
|
|
825
|
+
liff.getProfile()
|
|
826
|
+
];
|
|
827
|
+
case 4:
|
|
828
|
+
profile = _state.sent();
|
|
829
|
+
setLiffProfile(profile);
|
|
830
|
+
saveLiffUserInfoToStorage(profile);
|
|
831
|
+
return [
|
|
832
|
+
3,
|
|
833
|
+
6
|
|
834
|
+
];
|
|
835
|
+
case 5:
|
|
836
|
+
profileErr = _state.sent();
|
|
837
|
+
console.warn("取得 LIFF profile 失敗(非致命):", profileErr);
|
|
838
|
+
return [
|
|
839
|
+
3,
|
|
840
|
+
6
|
|
841
|
+
];
|
|
842
|
+
case 6:
|
|
843
|
+
return [
|
|
844
|
+
3,
|
|
845
|
+
8
|
|
846
|
+
];
|
|
847
|
+
case 7:
|
|
848
|
+
// 已有快取,跳過呼叫
|
|
849
|
+
console.log("跳過 liff.getProfile():已由 localStorage 或 state 取得 profile");
|
|
850
|
+
_state.label = 8;
|
|
851
|
+
case 8:
|
|
740
852
|
lineToken = liff === null || liff === void 0 ? void 0 : liff.getAccessToken();
|
|
741
853
|
// 未登入先進行登入
|
|
742
854
|
if (!liff.isLoggedIn()) {
|
|
@@ -759,21 +871,21 @@ var LiffProvider = function(param) {
|
|
|
759
871
|
tempFriendship = null;
|
|
760
872
|
if (!lineToken) return [
|
|
761
873
|
3,
|
|
762
|
-
|
|
874
|
+
14
|
|
763
875
|
];
|
|
764
|
-
_state.label =
|
|
765
|
-
case
|
|
876
|
+
_state.label = 9;
|
|
877
|
+
case 9:
|
|
766
878
|
_state.trys.push([
|
|
767
|
-
|
|
768
|
-
|
|
879
|
+
9,
|
|
880
|
+
11,
|
|
769
881
|
,
|
|
770
|
-
|
|
882
|
+
12
|
|
771
883
|
]);
|
|
772
884
|
return [
|
|
773
885
|
4,
|
|
774
886
|
liff.getFriendship()
|
|
775
887
|
];
|
|
776
|
-
case
|
|
888
|
+
case 10:
|
|
777
889
|
friendship = _state.sent();
|
|
778
890
|
friendFlag = friendship === null || friendship === void 0 ? void 0 : friendship.friendFlag;
|
|
779
891
|
setFriendship(friendFlag);
|
|
@@ -781,16 +893,16 @@ var LiffProvider = function(param) {
|
|
|
781
893
|
console.log("isFriendship", friendFlag);
|
|
782
894
|
return [
|
|
783
895
|
3,
|
|
784
|
-
|
|
896
|
+
12
|
|
785
897
|
];
|
|
786
|
-
case
|
|
898
|
+
case 11:
|
|
787
899
|
error = _state.sent();
|
|
788
900
|
console.error("Error in liff.getFriendship():", error);
|
|
789
901
|
return [
|
|
790
902
|
3,
|
|
791
|
-
|
|
903
|
+
12
|
|
792
904
|
];
|
|
793
|
-
case
|
|
905
|
+
case 12:
|
|
794
906
|
console.log("isValid", isValid);
|
|
795
907
|
if (tempFriendship && isValid) return [
|
|
796
908
|
2
|
|
@@ -799,23 +911,23 @@ var LiffProvider = function(param) {
|
|
|
799
911
|
4,
|
|
800
912
|
loginInit(lineToken)
|
|
801
913
|
];
|
|
802
|
-
case
|
|
914
|
+
case 13:
|
|
803
915
|
_state.sent();
|
|
804
|
-
_state.label =
|
|
805
|
-
case
|
|
916
|
+
_state.label = 14;
|
|
917
|
+
case 14:
|
|
806
918
|
return [
|
|
807
919
|
3,
|
|
808
|
-
|
|
920
|
+
16
|
|
809
921
|
];
|
|
810
|
-
case
|
|
922
|
+
case 15:
|
|
811
923
|
err = _state.sent();
|
|
812
924
|
setLiffError(err.toString());
|
|
813
925
|
console.log("LIFF init failed.", err);
|
|
814
926
|
return [
|
|
815
927
|
3,
|
|
816
|
-
|
|
928
|
+
16
|
|
817
929
|
];
|
|
818
|
-
case
|
|
930
|
+
case 16:
|
|
819
931
|
return [
|
|
820
932
|
2
|
|
821
933
|
];
|
|
@@ -972,6 +1084,12 @@ var LiffProvider = function(param) {
|
|
|
972
1084
|
setLoginType(null);
|
|
973
1085
|
setUserInfo(null);
|
|
974
1086
|
window.localStorage.removeItem(userInfoStorageKey);
|
|
1087
|
+
// 使用統一清理方法
|
|
1088
|
+
try {
|
|
1089
|
+
clearLiffData();
|
|
1090
|
+
} catch (e) {
|
|
1091
|
+
// ignore
|
|
1092
|
+
}
|
|
975
1093
|
console.warn("LIFF token 驗證失敗,需重新登入", err);
|
|
976
1094
|
return [
|
|
977
1095
|
2,
|
|
@@ -992,9 +1110,10 @@ var LiffProvider = function(param) {
|
|
|
992
1110
|
return trimmed.toLowerCase().startsWith("bearer ") ? trimmed : "Bearer ".concat(trimmed);
|
|
993
1111
|
};
|
|
994
1112
|
var searchParams = typeof window !== "undefined" ? new URLSearchParams(window.location.search) : null;
|
|
995
|
-
// 初始載入時從 localStorage 載入
|
|
1113
|
+
// 初始載入時從 localStorage 載入
|
|
996
1114
|
useEffect(function() {
|
|
997
1115
|
loadUserInfoFromStorage();
|
|
1116
|
+
loadLiffUserInfoFromStorage();
|
|
998
1117
|
}, []);
|
|
999
1118
|
// 客戶端初始化 LIFF
|
|
1000
1119
|
useEffect(function() {
|
|
@@ -1079,13 +1198,12 @@ var LiffProvider = function(param) {
|
|
|
1079
1198
|
userInfo: userInfo,
|
|
1080
1199
|
accessToken: accessToken,
|
|
1081
1200
|
liffError: liffError,
|
|
1082
|
-
initializeLiff: function() {
|
|
1083
|
-
return initializeLiff(false);
|
|
1084
|
-
},
|
|
1085
1201
|
isFriendship: isFriendship,
|
|
1086
1202
|
ensureLiffTokenValid: ensureLiffTokenValid,
|
|
1087
1203
|
accountLogin: accountLogin,
|
|
1088
|
-
loginType: loginType
|
|
1204
|
+
loginType: loginType,
|
|
1205
|
+
liffProfile: liffProfile,
|
|
1206
|
+
clearLiffData: clearLiffData
|
|
1089
1207
|
};
|
|
1090
1208
|
}, [
|
|
1091
1209
|
liffObject,
|
|
@@ -1096,7 +1214,9 @@ var LiffProvider = function(param) {
|
|
|
1096
1214
|
isFriendship,
|
|
1097
1215
|
ensureLiffTokenValid,
|
|
1098
1216
|
accountLogin,
|
|
1099
|
-
loginType
|
|
1217
|
+
loginType,
|
|
1218
|
+
liffProfile,
|
|
1219
|
+
clearLiffData
|
|
1100
1220
|
]);
|
|
1101
1221
|
return /*#__PURE__*/ jsx(LiffContext.Provider, {
|
|
1102
1222
|
value: contextValue,
|
package/package.json
CHANGED
|
@@ -3,11 +3,12 @@ type LiffContextType = {
|
|
|
3
3
|
liffObject: any;
|
|
4
4
|
loginData: any;
|
|
5
5
|
userInfo?: any;
|
|
6
|
+
liffProfile?: any;
|
|
6
7
|
accessToken: string;
|
|
7
8
|
liffError: string | null;
|
|
8
|
-
initializeLiff: () => Promise<void>;
|
|
9
9
|
isFriendship: boolean | null;
|
|
10
10
|
ensureLiffTokenValid: () => Promise<boolean>;
|
|
11
|
+
clearLiffData: () => void;
|
|
11
12
|
loginType: string | null;
|
|
12
13
|
accountLogin: (username: string, password: string) => Promise<void>;
|
|
13
14
|
};
|