Javascript passport-nodejs-在facebook验证后将用户返回上一页
我是passport的新手,正在尝试将用户重定向到他们之前通过facebook验证后的页面。我试图在会话上设置一个“req.session.returnTo”属性,但它在facebook/auth回调中不断消失(在该函数的任何地方都显示为未定义)。我的方法有什么问题 受保护路线:Javascript passport-nodejs-在facebook验证后将用户返回上一页,javascript,facebook,passport.js,Javascript,Facebook,Passport.js,我是passport的新手,正在尝试将用户重定向到他们之前通过facebook验证后的页面。我试图在会话上设置一个“req.session.returnTo”属性,但它在facebook/auth回调中不断消失(在该函数的任何地方都显示为未定义)。我的方法有什么问题 受保护路线: app.post('/api/recipebox', ensureAuthenticated, function (req, res) { }); 确保重新认证: function ensureAuthentica
app.post('/api/recipebox', ensureAuthenticated, function (req, res) {
});
确保重新认证:
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) {
return next();
}
req.session.returnTo = req.path;
res.redirect('/#!/login');
}
//Facebook/Passport.js回调:
app.get('/auth/facebook/callback', function (req, res, next) {
passport.authenticate('facebook', function (err, user, redirectURL) {
// console.log(' in the callback ');
if (err) {
console.log(err);
return res.redirect('/#!/login');
}
if (!user) {
return res.redirect('/#!/signup');
}
if (req.user) {
// console.log("==================== This is the user from routes.js", req.user);
res.cookie('user', JSON.stringify(user));
}
//actually storing the fact that they are logged in:
req.login(user, function (err) {
if (err) {
return res.redirect('/#!/login');
}
// console.log('=========== here!', user);
res.redirect(req.session.returnTo || '/#!');
req.session.returnTo = null;
});
})(req, res, next);
})
我正在使用本地策略进行电子邮件和密码登录。我参考以下链接设置passport JS身份验证和登录:
app.get('/auth/facebook/callback',passport.authenticate('facebook',
successRedirect: 'whatever-url-you-want',
failureRedirect: '/login' }));
我正在使用本地策略进行电子邮件和密码登录。我参考以下链接设置passport JS身份验证和登录:
app.get('/auth/facebook/callback',passport.authenticate('facebook',
successRedirect: 'whatever-url-you-want',
failureRedirect: '/login' }));
最后我在客户机上做了以下操作:
$httpProvider.interceptors.push(function ($q) {
return {
request: function (request) {
// console.log("hello");
// console.log(window.location.href);
request.headers.lastUrl = window.location.href;
return request;
},
responseError: function (response) {
return $q.reject(response);
}
};
});
在服务器上执行以下操作:
app.use(function (req, res, next) {
//req.session.returnTo is available everywhere in router now.
//filter if it not auth/login/signup, then save it. only update return to when it's not one of those.
if (req.get('lastUrl') !== undefined) {
var lastUrl = req.get('lastUrl');
if (lastUrl.indexOf("login") === -1 && lastUrl.indexOf("signup") === -1 && lastUrl !== "http://localhost:3000/#!/") {
req.session.returnTo = lastUrl;
}
console.log(req.session);
}
next();
});
希望它能帮助别人。我没有成功重定向的运气,我认为如果你最终出现在登录/注册/从页面中删除等页面上,事情就不会那么简单了。我最终在客户端上完成了以下操作:
$httpProvider.interceptors.push(function ($q) {
return {
request: function (request) {
// console.log("hello");
// console.log(window.location.href);
request.headers.lastUrl = window.location.href;
return request;
},
responseError: function (response) {
return $q.reject(response);
}
};
});
在服务器上执行以下操作:
app.use(function (req, res, next) {
//req.session.returnTo is available everywhere in router now.
//filter if it not auth/login/signup, then save it. only update return to when it's not one of those.
if (req.get('lastUrl') !== undefined) {
var lastUrl = req.get('lastUrl');
if (lastUrl.indexOf("login") === -1 && lastUrl.indexOf("signup") === -1 && lastUrl !== "http://localhost:3000/#!/") {
req.session.returnTo = lastUrl;
}
console.log(req.session);
}
next();
});
希望它能帮助别人。我没有成功重定向的运气,我不认为这会是那么简单,如果你最终在页面上像登录/注册/从页面一起带走