在OAuth20中集成JSON Web令牌

时间:2019-05-13 11:02:46

标签: node.js oauth-2.0 jwt gmail-api

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

我尝试传递它,并且如果我在控制台日志中获得令牌,但是如何将它传递给用户,就像我可以通过oauth或它以某种方式将其附加到cb中的req.user对象一样像这样的东西?

我正在Google策略中做到这一点:

 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是中间件功能

这是Auth中间件功能:

module.exports = function(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 个答案:

答案 0 :(得分:0)

我找到了解决方案,您需要在dir /b ^| findstr /vi /r /c:^"test mappe3"$ 中对令牌进行签名,然后使用重定向发送它以响应重定向URL。

序列化用户功能:

passport.serializeUser

重定向路线:

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);
});