![](/img/trans.png)
[英]Passport for Google oauth20, middleware not in use, passport.initialize()
[英]Integrating json web token in oauth20
我正在嘗試創建一個api用戶可以使用電子郵件注冊或者可以使用google登錄,我使用json web令牌進行身份驗證和oauth20,問題是,我可以通過一個帶有oauth的jwt嗎?
我試過傳遞它,我得到一個令牌,如果,我控制日志,但是怎么做,我把它傳遞給用戶,就像我可以通過某種方式將它附加到cb中的req.user對象oauth或類似的東西?
我在谷歌策略中這樣做:
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();
};
我找到了解決方案,你需要在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);
});
重定向路由:
router.get(
"/google/redirect",
passport.authenticate("google", { sessionStorage: false }),
(req, res) => {
res.redirect("/" + token);
}
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.