Pat*_*ick 26 authentication connect node.js express
我正在使用带有Express和connect-auth的node.js来验证用户身份.
这是请求/索引时的验证:
if(req.isAuthenticated()) {
res.redirect('/dashboard');
} else {
res.render('index', { layout: 'nonav' });
}
Run Code Online (Sandbox Code Playgroud)
但是,在注销并返回fe'/ dashboard'后,我可以看到仪表板.
如何对每个请求进行身份验证检查以确保始终存在有效用户?
更新 我的身份验证没有任何问题,一切正常!我需要一个解决方案,检查每个路由/请求是否有有效用户,而不在路由实现中放置函数或if语句,因为整个App无论如何都需要一个有效的用户.Express-Authentication-Example在路由定义中使用"restrict",它很接近,但是很多路由很容易被遗忘.
Zik*_*kes 35
app.all('*',function(req,res,next){
if(req.isAuthenticated()){
next();
}else{
next(new Error(401)); // 401 Not Authorized
}
});
// NOTE: depending on your version of express,
// you may need to use app.error here, rather
// than app.use.
app.use(function(err,req,res,next){
// Just basic, should be filled out to next()
// or respond on all possible code paths
if(err instanceof Error){
if(err.message === '401'){
res.render('error401');
}
}
});
Run Code Online (Sandbox Code Playgroud)
如果all在需要身份验证的路由之前定义路由,在没有路由之后定义路由(例如主页,登录等),那么它应该只影响需要它的路由.或者,您可以使用RegExp代替'*',其中包括需要身份验证的子路径或路径列表.
另一种选择是创建一个函数,以包含在需要auth的每个路由中:
function IsAuthenticated(req,res,next){
if(req.isAuthenticated()){
next();
}else{
next(new Error(401));
}
}
app.get('/login',function(req,res,next){
res.render('login');
});
app.get('/dashboard',IsAuthenticated,function(req,res,next){
res.render('dashboard');
});
app.get('/settings',IsAuthenticated,function(req,res,next){
res.render('settings');
});
Run Code Online (Sandbox Code Playgroud)
您可以使用sessions提供的机制connect.将此代码放入app.configure()以启用它:
app.use(express.cookieParser());
app.use(express.session({
secret: 'some string used for calculating hash'
}));
Run Code Online (Sandbox Code Playgroud)
之后,您将能够使用req.session对象(每个请求不同)来存储您的身份验证数据(或其他任何内容).所以,你的示例代码看起来像这样:
if (req.session && req.session.authorized) {
res.redirect('/dashboard');
}
else {
res.render('index', {layout: 'nonav'});
}
Run Code Online (Sandbox Code Playgroud)
身份验证将如下所示:
req.session.authorized = checkPassword(login, passw);
Run Code Online (Sandbox Code Playgroud)
登出:
req.session.destroy();
Run Code Online (Sandbox Code Playgroud)
更多信息可以在这里找到.
| 归档时间: |
|
| 查看次数: |
27028 次 |
| 最近记录: |