我在开头就用过这个:
var app = express.createServer(
express.cookieParser(),
express.session({ secret: 'somesecretword' })
);
下面的代码是一个示例代码,用于获取以uname为键的用户详细信息。
我通过调用model.fetch()来调用骨干模型的url中的代码。
app.get('/user/:uname/', function (req, res) {
var uname=req.params.uname;
if(!req.session.user) // check if logged in
res.send("Not Logged In");
return UserModel.find({uname : uname},function(err, user) {
if (!err) {
return res.send(user);
} else {
return res.send(err);
}
});
});
所以,在这里我直接在上面的get方法中编写了验证会话的代码。
如果我有很多这样的方法怎么办?我是否必须在每个方法中编写相同的内容,或者Node中是否有任何控制器可以执行此操作?
例如,告诉我一个验证路径“/ user”的控制器,意味着“/ user / anythinghere /”应该自动验证或者给我一些其他更好的方法。
答案 0 :(得分:2)
您需要的是使用app.get方法传递的某种中间件。我不能完全重写您的代码块,因为我自己仍然在学习Node.js,如何从Express文档(修改了一下以尝试并满足您的需求)
function requireAuth(req, res, next) {
if(req.session.user) {
next();
} else {
next(new Error('Failed to load user ' + req.params.id));
}
}
app.get('/user/edit/:id', requireAuth, function(req, res){
res.send('you can see this because you are authed');
});
app.get('/', function(req, res){
res.send('Not requiring auth on homepage');
});
这里的文档解释得更好,然后我可以:
http://expressjs.com/guide.html#route-middleware
我希望这可以提供一些帮助。 :)如果有的话,我自己刚刚学会了新的回答,谢谢:D
答案 1 :(得分:1)
你可以使用中间件并把它放在这样的路线中:
app.get('/user/edit/:id', requireAuth, function(req, res){
res.send('you can see this because you are authed');
});
或者我使用通配符做的事情是这样的:
app.all("/api/private*", ensureAuthenticated);
您可以在此处详细了解:https://fabianosoriani.wordpress.com/2011/08/15/express-api-on-node-js-with-mysql-auth/