node.js - 使用firebase Auth在服务器端登录但不在客户端
问题描述
我在服务器端使用带有express的节点并尝试使用Firebase Auth从客户端登录新用户,问题是当我将tokenId发送到服务器然后重定向到仪表板时,客户端看不到用户已登录
我在客户端的代码:
firebase
.auth()
.createUserWithEmailAndPassword(login, password)
.then((res) => {
return user.getIdToken().then((idToken) => {
return fetch("/sessionLogin", {
method: "POST",
headers: {
Accept: "application/json",
"Content-Type": "application/json",
"CSRF-Token": Cookies.get("XSRF-TOKEN"),
},
body: JSON.stringify({ idToken }),
});
});
})
.catch(function(error) {
console.log("Login Failed!", error);
window.alert(error.message);
})
.then(() => {
window.location.assign("/success");
});
return false;
});
服务器端:
app.post("/sessionLogin", (req, res) => {
const idToken =req.body.idToken.toString();
const expiresIn = 60 * 60 * 24 * 2 * 1000;
admin
.auth()
.createSessionCookie(idToken, { expiresIn })
.then(
(sessionCookie) =>{
const options = { maxAge: expiresIn, httpOnly: true};
res.cookie("session", sessionCookie, options);
res.end(JSON.stringify({ status: "success"}));
},
(error) => {
res.status(401).send("UNAUTHORIZED REQUEST");
}
);
});
app.get("/sessionLogout", (req, res) => {
res.clearCookie("session");
res.redirect("/");
})
然后在检查用户是否在客户端登录时
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
console.log(user)
console.log("user in")
} else {
console.log(user)
console.log("user out")
}
});
它让我知道用户没有登录并且为空。我试图找到这个问题的答案,但通常情况相反——将令牌从客户端发送到服务器。
解决方案
推荐阅读
- ruby-on-rails - Rails:服务更改直到重新启动才反映
- ruby-on-rails - 如何在 Rails 模型中访问 ActiveStorage 临时文件?
- matlab - MATLAB 中同一图形的 imshow 和 imwrite 不匹配
- java - A* 搜索的 Java 实现
- sqlite - Picker SelectedItem 和两个不同的数据库表
- html - 如何使用 SVG 为多边形设置动画以旋转到位?
- python - csv writerow() 覆盖
- arrays - Regexreplace 函数将多个“\n”转换为一个
- javascript - 如何使用 Javascript 替换不规则字符串前缀?
- amazon-web-services - 如何为使用 cognito 登录的用户和未登录的用户授权 API 网关端点