当前位置: 首页 > 知识库问答 >
问题:

在oauth20中集成json web令牌

巴洲
2023-03-14

我正在尝试创建一个api,用户可以通过电子邮件注册,也可以通过google登录,我使用json web令牌进行身份验证和oauth20,问题是,我可以通过一个带有OAuth的jwt吗?

我尝试过传递它,并且,我得到了一个令牌,如果,我控制台日志,但是,如何,我传递它给用户,比如,我可以通过oauth或类似的方法将它附加到cb中的Req.user对象吗?

我在谷歌战略中是这样做的:

 async (accessToken, refreshToken, params, profile, cb) => {

   const userCheck = await User.findOne({ googleId: profile.id });

 if (userCheck) {
        const payload = {
          user: {
            id: userCheck.id
          }
        };

        jwtToken.sign(
          payload,
          config.get("jwtSecret"),
          { expiresIn: 360000 },
          (err, token) => {
            if (err) {
              throw err;
            }
            //   console.log(token);
            return res.json({ token });
          },
          cb(null, userCheck)
        );

我的路由是这样保护的:

router.get("/", auth, async (req, res)=>{
...some code
    }

其中auth是一个中间件函数

这是身份验证中间件功能:

module.exports=函数(req,res,next){

  const token = req.header("x-auth-token");

  // If no token found


 if (!token)
 {
    return res.status(401).json({ msg: "User not authorized" });
  }

  // Set token to user

 try {
    const decoded = jwtToken.verify(token, config.get("jwtSecret"));

     req.user = decoded.user;
  } 

 catch (err)
 {
    res.
status(401)
.json({ msg: "User not authenticated, please login or sign up" });
  }
  next();

};

共有1个答案

轩辕欣可
2023-03-14

我找到了解决方案,您需要在passport.serializeuser中传递签名令牌,然后发送带有重定向的它,以响应重定向URL。

序列化用户函数

passport.serializeUser(async (user, cb) => {
  const payload = {
    user: {
      id: user.id
    }
  };
  token = jwtToken.sign(payload, config.get("jwtSecret"), {
    expiresIn: 360000
  });
  console.log("serialize");
  cb(null, user.id);
});

重定向路由:

router.get(
  "/google/redirect",
  passport.authenticate("google", { sessionStorage: false }),
  (req, res) => {
    res.redirect("/" + token);
  }
);
 类似资料:
  • null 如何在transform()步骤中添加Jaxb2Marshaller?

  • 我将开始解释我所做的所有步骤,并最终说明问题所在。 下载ZXing-2.2https://code.google.com/p/zxing/downloads/list 全部在zxing-2.2中提取 下载并安装ApacheAnthttp://www.youtube.com/watch?v=XJmndRfb1TU 使用Windows命令行(运行- 这一刻就像是将ZTE库直接集成到我的Android应

  • 1)我正在使用 2)这两种语言不需要集成Tomcat就可以在Apache服务器上运行。 3)但是,为了增强网站的逻辑性,我们使用Java作为另一种后端编程语言。 4)目前,该Java需要与网站的JSP和PHP页面进行集成。 5)因此,在一个JSP文件中,一部分代码可以是Java的,一部分代码可以是PHP的。 6)理想情况下,如果部分PHP代码运行在Apache服务器上,Java代码运行在Tomca

  • 如何在下面的JUnit类中运行integrationFlow?目前出现了例外情况 因为整合流没有启动。 JUnit类: }

  • 我有一个框架,它是用来创建的核心Java+TestNG。然后是TDD模型,POM是我们的构建管理工具。有人能告诉我是否有可能使用Cucumber将框架从TDD更新到BDD。但是我仍然希望对此需求做最小的更改,比如不更改任何现有的技术(核心语言、TestNG、Maven Sys.)。我的目标是如何在Eclipse中使用testng.xml/testng插件运行cucumber TC。在Jenkin

  • 本文向大家介绍如何在Asp.Net Core中集成Refit,包括了如何在Asp.Net Core中集成Refit的使用技巧和注意事项,需要的朋友参考一下   在很多时候我们在不同的服务之间需要通过HttpClient进行及时通讯,在我们的代码中我们会创建自己的HttpClient对象然后去跨领域额进行数据的交互,但是往往由于一个项目有多个人开发所以在开发中没有人经常会因为不同的业务请求去写不同的