javascript - 如何将令牌从服务器发送到客户端?
问题描述
我有快速应用程序,在端口 8000 上运行,我也在端口 3000 上做出反应。我正在尝试实现 google oauth。
这就是我所做的。
我尝试将获取请求发送到我的 api 端点,然后我的快速服务器将用户重定向到谷歌登录。
然后,如何从get
请求中将令牌从服务器发送到客户端?这是我的快速代码。我尝试直接从服务器发送 cookie,但我不知道为什么 cookie 在端口 3000 上不可用,这是我的反应应用程序。有什么巧妙的方法可以将 jwt 发送给客户端吗?
router.get(
"/google/callback",
passport.authenticate("google", {
scope: ["profile", "email"],
failureRedirect: "/login",
session: false,
}),
(req, res) => {
const payload = {
id: req.user.id,
};
jwt.sign(payload, secret, { expiresIn: tokenLife }, (err, token) => {
if(err) {
console.log('error', err)
}
const jwt = `Bearer ${token}`;
console.log('ini token', token)
const htmlWithEmbeddedJWT = `
<html>
<script>
// Save JWT to cookie
// document.cookie = 'token=${jwt};'
document.cookie = 'token=${jwt}; SameSite=None; Secure'
// Redirect browser to root of application
window.open('http://localhost:3000/login', '_self')
</script>
</html>
`;
res.send(htmlWithEmbeddedJWT);
});
}
);
解决方案
它不可用,因为您已响应 google 呼叫,然后将客户端上的页面重定向到 localhost,显然 cookie 将不可用。
在这种情况下处理身份验证的常用方法是定义一个成功重定向,该重定向期望在查询参数中接收某种令牌。
推荐阅读
- node.js - 如何测试 sendgrid-nodejs 函数?
- python - 最大化外部组时如何隐藏内部轮廓组
- r - Dplyr group_by 和总结,但保留非数字变量
- react-native - 使用 AWS Amplify 存储时“缺少必需的密钥‘桶’”
- angular - 如何使用茉莉花测试框架以角度模拟路由器事件订阅响应
- javascript - 在使用 Aura 构建的表单中使用 javascript 更改输入值
- puppet - 如何确保 puppet exec 在每个触发的事件上运行?
- python - 一次扭曲了许多 inlineCallbacks
- r - 计算 R data.table 中许多概率的分位数,用于多列
- grpc - gRPC 服务器端半关闭是否应该隐式终止客户端?