feat(auth): persist login provider for restored sessions

This commit is contained in:
2026-06-30 12:50:18 +08:00
parent 768b24774d
commit a99a6e056d
5 changed files with 67 additions and 12 deletions
+16 -1
View File
@@ -235,7 +235,7 @@ export const guestLoginActor = fromPromise<LoginStatus, void>(async () => {
// 1. deviceIdentifier.getDeviceId() —— 无则生成 + 落盘
// (生产环境使用 fingerprintjs;非生产环境使用本地 UUID)
// (给后续 OAuth/email 登录准备 deviceId,不在 splash 首次访问就 auto-create 游客)
// 2. AuthStorage.getLoginToken() —— 有 → "email"
// 2. AuthStorage.getLoginToken() —— 有 → 读取 loginProvider,缺省回退 "email"
// 3. AuthStorage.getFacebookId() —— 有 → facebookIdLogin → "facebook"
// 4. AuthStorage.getGuestToken() —— 有 → "guest"
// 5. 都没有 → "notLoggedIn"(让用户显式选 OAuth / Email / Guest 入口)
@@ -248,6 +248,10 @@ export const checkAuthStatusActor = fromPromise<LoginStatus, void>(async () => {
// 2. 查 loginToken
const loginTokenR = await storage.getLoginToken();
if (loginTokenR.success && loginTokenR.data) {
const providerR = await storage.getLoginProvider();
if (providerR.success && isBusinessLoginProvider(providerR.data)) {
return providerR.data;
}
return "email" as LoginStatus;
}
@@ -281,3 +285,14 @@ export const checkAuthStatusActor = fromPromise<LoginStatus, void>(async () => {
// 5. 都没有 → "notLoggedIn"(保持 splash 页面 + 登录入口)
return "notLoggedIn" as LoginStatus;
});
function isBusinessLoginProvider(
provider: LoginStatus | null,
): provider is LoginStatus {
return (
provider === "email" ||
provider === "facebook" ||
provider === "google" ||
provider === "apple"
);
}