gpt4 book ai didi

javascript - Firebase:为什么登录后调用 `signOut()`?

转载 作者:行者123 更新时间:2023-11-30 13:45:56 26 4
gpt4 key购买 nike

firebase.initializeApp({
apiKey: 'AIza…',
authDomain: '<PROJECT_ID>.firebasepp.com'
});

// As httpOnly cookies are to be used, do not persist any state client side.
firebase.auth().setPersistence(firebase.auth.Auth.Persistence.NONE);

// When the user signs in with email and password.
firebase.auth().signInWithEmailAndPassword('user@example.com', 'password').then(user => {
// Get the user's ID token as it is needed to exchange for a session cookie.
return user.getIdToken().then(idToken = > {
// Session login endpoint is queried and the session cookie is set.
// CSRF protection should be taken into account.
// ...
const csrfToken = getCookie('csrfToken')
return postIdTokenToSessionLogin('/sessionLogin', idToken, csrfToken);
});
}).then(() => {
// A page redirect would suffice as the persistence is set to NONE.
return firebase.auth().signOut();
}).then(() => {
window.location.assign('/profile');
});

使用 Firebase 登录后,为什么要调用 return firebase.auth().signOut();

登录不是重点吗?

在 Firebase 文档中,它指出:成功后,状态应从客户端存储中清除。

这有什么意义呢?

最佳答案

哇,我从没见过这个,而且绝对不是很明显。

通常 Firebase 身份验证将身份验证状态存储在本地存储中。例如,当您重新加载页面时,然后从那里读回它。


当您使用 session cookie 时,身份验证状态存储在客户端的 cookie 中。您可以在 managing cookies 上的文档中显示的服务器端代码中看到这种情况。 (您问题中的代码也来自哪里)。例如,对于 Node.js,它显示:

...
res.cookie('session', sessionCookie, options);
...

所以现在我们有两个存储身份验证状态的地方:

  1. 通过 SDK 在本地存储中。
  2. 在 cookie 中,通过自定义服务代码。

调用 firebase.auth().signOut() 从本地存储中删除身份验证状态,只在 cookie 中留下一个。


正如代码中的注释所说:

// As httpOnly cookies are to be used, do not persist any state client side.
firebase.auth().setPersistence(firebase.auth.Auth.Persistence.NONE);

...

// A page redirect would suffice as the persistence is set to NONE.
return firebase.auth().signOut();

第一个语句确保 SDK 将不再保留身份验证状态。但是可能仍然存储着陈旧的状态,因此最好通过退出来清除它。

关于javascript - Firebase:为什么登录后调用 `signOut()`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59340491/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com