首页 > 解决方案 > 处理 Firebase 身份验证

问题描述

如果我使用 Firebase Auth、JS 和 Python 正确处理身份验证/授权,我需要一些帮助。

用户登录后,我会捕获 idToken 并在浏览器中创建一个 cookie:

firebase.auth().signInWithEmailAndPassword(email, pass)
.then(({user}) => {
    return user.getIdToken().then((idToken) => {
        if (idToken) {
            document.cookie = "token=" + idToken;
            window.location.assign('/profile');
        } else {
            document.cookie = "token="
        }
    })                    
})
.catch((error) => {
    //handle error here
});

路由 /profile 应该受到保护,因此我创建了一个装饰器并检索 cookie 并对其进行验证:

id_token = request.cookies.get("token")

if not id_token:
    return redirect(url_for('login'))
try:
    decoded_token = auth.verify_id_token(id_token)
    uid = decoded_token['uid']
except Exception as e:
    print("Exception: {}".format(e))
    return redirect(url_for('login'))

到目前为止这是有效的,但我想从安全的角度看看这是否是理想的情况。另外,onAuthStateChanged 呢?在上述情况下我应该如何处理?

标签: javascriptfirebasefirebase-authentication

解决方案


Firebase SDK 会在标头中的每个请求中发送 ID 令牌Authorization,因此在 cookie 中发送它不会或多或少危险。

signInWithEmailAndPassword不过,我不会确定令牌,而是通过监听onIdTokenChanged事件并使用该时刻更新您的 cookie 来监控 ID 令牌的生成。


推荐阅读