我有一条路线,该路线旨在使用google oauth护照策略来验证用户身份,{/auth/google
)我也想在该路线(/auth/google?someParam=SOME_PARAM
)的url中传递其他数据作为查询我想在(req.user
)从Google取回数据时将其添加到/auth/google/callback
中的数据。问题是我可以通过/auth/google
访问此查询,但是Google会将我重定向到/auth/google/callback
,后者不再有权访问此数据。
注意-由于设计限制,我无法使用外部源作为数据库。
passport-google 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);
答案 0 :(得分:1)
您必须先在会话中存储参数,然后才能向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;
答案 1 :(得分:0)
您应该参考Google的文档。一旦用户回到您的站点,您可以使用“ state”参数传递您想要获取的任何数据。这是此参数的主要用途。 您可以查看详细信息here。