让我们说我正在尝试访问路径http://localhost:3000/users#/WyCrYc28r/foo/1414585518343
。
但是路径/users
只能由经过身份验证的用户访问,如下所示:
app.get('/users', isLoggedIn, function (req, res) {
req.session.user = req.user;
res.cookie('uid', req.session.passport.user)
.render('users', { title: 'The Foo Machine', user: req.user });
});
以下是isLoggedIn
中间件:
function isLoggedIn(req, res, next) {
if (req.isAuthenticated())
return next();
res.redirect('/login');
}
以下是login
的处理方式:
app.post('/login', passport.authenticate('local-login', {
successRedirect: '/users',
failureRedirect: '/login',
failureFlash: true
}));
登录后我被重定向到http://localhost:3000/users
,但我希望用户在成功登录后转到http://localhost:3000/users#/WyCrYc28r/foo/1414585518343
,因为这是用户想要去的地方。< / p>
我在这里使用PassportJS
模块进行身份验证/授权,并在AngularJS
中开发了前端。
有人可以帮我吗?
答案 0 :(得分:3)
我可以想到这种模式的两种常见解决方案。在那里添加angularjs可能会使事情变得复杂,但也许这会让你开始:
1)将网址保存为重定向网址
中的查询参数function isLoggedIn(req, res, next) {
if (req.isAuthenticated())
return next();
res.redirect('/login?fromUrl='+req.originalUrl);
}
然后在登录后获得该值并进行重定向,例如:
app.post('/login', passport.authenticate('local-login'), { failureRedirect: '/login', failureFlash: true },
function(req, res) {
res.redirect(req.param('fromUrl'));
});
2)(不那么简单或可扩展)使用会话状态来存储from-url。它可能看起来像:
function isLoggedIn(req, res, next) {
if (req.isAuthenticated())
return next();
req.session.fromUrl = req.originalUrl;
res.redirect('/login');
}
然后在登录后获得该值并进行重定向,例如:
app.post('/login', passport.authenticate('local-login'), { failureRedirect: '/login', failureFlash: true },
function(req, res) {
res.redirect(req.session.fromUrl);
});