我有一个路由,这意味着使用google oauth passport策略对用户进行身份验证,(/auth/google)我还想将额外的数据作为查询传递到该路由(/auth/google?someParam=SOME_PARAM)中的url中,当我在(/auth/google/callback)中从谷歌获取这些数据时,我想将这些数据添加到req.user中。问题是,我可以通过/auth/google访问这个查询,但谷歌会将我重定向到/auth/google/callback,它不再能够访问这些数据。
注意-由于设计的限制,我不能做它与外部源作为数据库。
passport-谷歌docs
代码:
// auth.js
router.get(
"/",
(req, res, next) => {
let siteName = req.query.siteName;
let pageName = req.query.pageName;
console.log("siteName", siteName);
return next();
},
passport.authenticate("google", {
scope: ["https://www.googleapis.com/auth/plus.login"]
})
);
module.exports = router;
// authCb.js
router.get(
"/",
passport.authenticate("google", {
scope: ["https://www.googleapis.com/auth/plus.login"],
failureRedirect: "/"
}),
(req, res) => {
console.log(req.user);
res.send(req.user);
}
);
module.exports = router;
// app.js
app.use("/auth/google", auth);
app.use("/auth/google/callback", authCb);发布于 2018-09-25 17:41:05
在向google发送身份验证请求之前,您必须将参数存储在会话中。然后,在重定向之后,从会话中获取参数。
// auth.js
router.get(
"/",
(req, res, next) => {
req.session.lastQuery = req.query;
return next();
},
passport.authenticate("google", {
scope: ["https://www.googleapis.com/auth/plus.login"]
})
);
module.exports = router;
// authCb.js
router.get(
"/",
passport.authenticate("google", {
scope: ["https://www.googleapis.com/auth/plus.login"],
failureRedirect: "/"
}),
(req, res) => {
const { lastQuery } = req.session;
console.log(lastQuery);
}
);
module.exports = router;发布于 2018-09-26 08:11:17
您应该参考Google的文档。您可以使用"state“参数来传递用户返回到您的站点后想要返回的任何数据。这是此参数的主要用途。您可以查看详细信息here。
https://stackoverflow.com/questions/52494403
复制相似问题