如何从服务器向客户端发送令牌?

时间:2021-05-10 17:11:29

标签: javascript node.js express oauth

我有 express 应用,运行在 8000 端口,我也在 3000 端口上有反应。 我正在尝试实施 google oauth。

这就是我所做的。

我尝试向我的 api 端点发送 get 请求, 然后我的快速服务器将用户重定向到谷歌登录。

enter image description here

然后,如何通过 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);
    });
  }
);

1 个答案:

答案 0 :(得分:1)

它不可用,因为您已响应 google 调用,然后将客户端上的页面重定向到本地主机,显然 cookie 将不可用。

在这种情况下处理身份验证的常用方法是定义一个成功重定向,该重定向将期望在查询参数中接收某种令牌。