我正在尝试创建一个用户可以通过电子邮件注册或可以通过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();
};
答案 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);
});