【问题标题】:How to send token from server to client?如何将令牌从服务器发送到客户端?
【发布时间】:2021-08-01 02:49:33
【问题描述】:

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

这就是我所做的。

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

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

【问题讨论】:

    标签: javascript node.js express oauth


    【解决方案1】:

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

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

    【讨论】:

    • 那么,我应该在我的反应应用程序中发送查询参数吗?谢谢你回答顺便说一句
    • 当您成功进行重定向时,您应该从服务器发送查询参数。
    猜你喜欢
    • 2011-11-12
    • 2019-01-27
    • 2018-06-16
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 2021-02-15
    相关资源
    最近更新 更多