javascript - 处理 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 呢?在上述情况下我应该如何处理?
解决方案
Firebase SDK 会在标头中的每个请求中发送 ID 令牌Authorization
,因此在 cookie 中发送它不会或多或少危险。
signInWithEmailAndPassword
不过,我不会确定令牌,而是通过监听onIdTokenChanged
事件并使用该时刻更新您的 cookie 来监控 ID 令牌的生成。
推荐阅读
- node.js - JSON Parse = > SyntaxError: Unexpected token < in JSON at JSON.parse (
) - php - PHP SQLite :: 转义双引号
- javascript - jQuery datepicker 仅适用于警报
- python - 如何在 python slice = [:] 中使用 lentgh 变量
- laravel - laravel 播种机多语言
- winapi - Media Foundation Transform 能否实现多个应用同时访问网络摄像头?
- python - 使用“插入或忽略”语句加速 Python 执行
- spring-boot - 如何为 kibana 和 apm-server 启用执行器健康
- node.js - 无法使用带有 $eq 的 FindByIdAndUpdate 进行更新
- webpack - 在 Javascript 模块中自动导入 css