feat(chat): prompt facebook users to open external browser

This commit is contained in:
2026-06-18 10:59:13 +08:00
parent d2bced8889
commit 172ef28060
9 changed files with 242 additions and 30 deletions
+25 -4
View File
@@ -243,8 +243,9 @@ export const guestLoginActor = fromPromise<LoginStatus, void>(async () => {
// 1. deviceIdentifier.getDeviceId() —— 无则通过 fingerprintjs 生成 + 落盘
// (给后续 OAuth/email 登录准备 deviceId,不在 splash 首次访问就 auto-create 游客)
// 2. AuthStorage.getLoginToken() —— 有 → "email"
// 3. AuthStorage.getGuestToken() —— 有 → "guest"
// 4. 都没有 → "notLoggedIn"(让用户显式选 OAuth / Email / Guest 入口)
// 3. AuthStorage.getFacebookId() —— 有 → facebookIdLogin → "facebook"
// 4. AuthStorage.getGuestToken() —— 有 → "guest"
// 5. 都没有 → "notLoggedIn"(让用户显式选 OAuth / Email / Guest 入口)
export const checkAuthStatusActor = fromPromise<LoginStatus, void>(async () => {
// 1. 拿 deviceId(不用于 auto-guest-login,仅供后续登录用)
@@ -257,12 +258,32 @@ export const checkAuthStatusActor = fromPromise<LoginStatus, void>(async () => {
return "email" as LoginStatus;
}
// 3. 查 guestToken
// 3. 外部浏览器深链同步:仅 fbid 落地时,用它换业务 token
const facebookIdR = await storage.getFacebookId();
if (facebookIdR.success && facebookIdR.data) {
const avatarUrlR = await UserStorage.getInstance().getAvatarUrl();
const result = await authRepo.facebookIdLogin({
fbId: facebookIdR.data,
avatarUrl: avatarUrlR.success ? avatarUrlR.data ?? undefined : undefined,
});
if (Result.isErr(result)) {
log.warn(
{ err: result.error.message },
"[auth-machine] checkAuthStatusActor: facebookIdLogin failed",
);
return "notLoggedIn" as LoginStatus;
}
return "facebook" as LoginStatus;
}
// 4. 查 guestToken
const guestTokenR = await storage.getGuestToken();
if (guestTokenR.success && guestTokenR.data) {
return "guest" as LoginStatus;
}
// 4. 都没有 → "notLoggedIn"(保持 splash 页面 + 登录入口)
// 5. 都没有 → "notLoggedIn"(保持 splash 页面 + 登录入口)
return "notLoggedIn" as LoginStatus;
});