我已经使用PassportJS设置了Facebook身份验证,但无法将用户重定向回其原始URL。
这些是路线:
app.get("/api/auth/facebook", passport.authenticate("facebook", { scope: ["public_profile", "email"] }));
app.get(
"/api/auth/facebook/callback",
passport.authenticate("facebook", { failureRedirect: "/login" }),
(req, res) => {
logger.debug("Successful authentication");
res.redirect("/");
}
);
在这里我将省略策略代码,因为我不确定它是否相关,但是它很简单,没什么不同。
我的问题是如何才能在回调中访问原始URL,以免将用户重定向回“ /”?一旦请求发送到Facebook并返回,查询字符串参数似乎就会丢失。
谢谢
答案 0 :(得分:1)
我为解决此问题所做的工作是将用户的原始路径存储到会话中,并在身份验证完成后将其重定向回会话。
在调用护照身份验证方法之前,我添加了一个名为storeRedirectToInSession的中间件,如下所示:
app.get(
"/api/auth/facebook",
storeRedirectToInSession,
passport.authenticate("facebook", { scope: ["public_profile", "email"] })
);
app.get(
"/api/auth/facebook/callback",
passport.authenticate("facebook", { failureRedirect: "/login" }),
(req, res) => {
logger.debug("Successful authentication");
res.redirect(req.session.redirectTo);
}
);
中间件:
const storeRedirectToInSession = (req, res, next) => {
let url_parts = url.parse(req.get("referer"));
const redirectTo = url_parts.pathname;
req.session.redirectTo = redirectTo;
next();
};
这需要'url'节点包。 我也在使用express和express-session软件包。