fix(auth): return to guest session on logout
This commit is contained in:
@@ -49,8 +49,9 @@ function createTestAuthMachine(
|
||||
LoginStatus,
|
||||
{ accessToken: string }
|
||||
>(async () => "facebook"),
|
||||
logout: fromPromise<void>(async () => {
|
||||
logout: fromPromise<LoginStatus>(async () => {
|
||||
logoutSpy();
|
||||
return "guest";
|
||||
}),
|
||||
},
|
||||
});
|
||||
@@ -125,7 +126,7 @@ describe("authMachine", () => {
|
||||
actor.stop();
|
||||
});
|
||||
|
||||
it("logout resets auth state and keeps initialization completed", async () => {
|
||||
it("logout transitions authenticated users back to guest", async () => {
|
||||
const logoutSpy = vi.fn<() => void>();
|
||||
const actor = createActor(createTestAuthMachine({ logoutSpy })).start();
|
||||
|
||||
@@ -141,7 +142,7 @@ describe("authMachine", () => {
|
||||
|
||||
const context = actor.getSnapshot().context;
|
||||
expect(logoutSpy).toHaveBeenCalledOnce();
|
||||
expect(context.loginStatus).toBe("notLoggedIn");
|
||||
expect(context.loginStatus).toBe("guest");
|
||||
expect(context.hasInitialized).toBe(true);
|
||||
|
||||
actor.stop();
|
||||
|
||||
@@ -94,10 +94,12 @@ export const oauthSignInActor = fromPromise<void, AuthProvider>(async ({ input }
|
||||
}
|
||||
});
|
||||
|
||||
export const logoutActor = fromPromise<void>(async () => {
|
||||
export const logoutActor = fromPromise<LoginStatus>(async () => {
|
||||
const authRepo = getAuthRepository();
|
||||
const result = await authRepo.logout();
|
||||
const deviceId = await deviceIdentifier.getDeviceId();
|
||||
const result = await authRepo.logoutToGuest(deviceId);
|
||||
if (Result.isErr(result)) throw result.error;
|
||||
return "guest" as LoginStatus;
|
||||
});
|
||||
|
||||
// ========== OAuth token → 后端业务 token sync actors ==========
|
||||
|
||||
@@ -241,15 +241,16 @@ export const authMachine = setup({
|
||||
src: "logout",
|
||||
onDone: {
|
||||
target: "idle",
|
||||
actions: assign(() => ({
|
||||
...initialState,
|
||||
actions: assign({
|
||||
loginStatus: ({ event }) => event.output,
|
||||
hasInitialized: true,
|
||||
})),
|
||||
errorMessage: null,
|
||||
}),
|
||||
},
|
||||
onError: {
|
||||
target: "idle",
|
||||
actions: assign(({ event }) => ({
|
||||
...initialState,
|
||||
loginStatus: "guest",
|
||||
hasInitialized: true,
|
||||
errorMessage: toAuthErrorMessage(event.error),
|
||||
})),
|
||||
|
||||
Reference in New Issue
Block a user