我想要实现的情况:
请求/注册运行AuthController.register
请求/ facebook运行AuthController.register,但之前应用了facebook政策。
我已在
中创建了一项政策/api/policies/facebook.js
像这样
var graph = require('fbgraph');
module.exports = function(req, res, next) {
facebook_token = req.query.facebook_token;
if(!facebook_token){
res.send('401',{error:"Missing facebook token"});
}
graph.setAccessToken(facebook_token);
graph.get("me",function(err,graph_res){
if(err){
res.send('401',{error:"Facebook authentication error"});
return;
}
else{
next();
}
});
};
在
中设置策略/config/policies.js
像这样
module.exports.policies = {
'auth': {
'facebook': ['facebook']
}
}
我设置了这样的路线
module.exports.routes = {
'post /register': 'AuthController.register',
'post /facebook': 'AuthController.register',
};
现在,facebook政策中的代码无法被调用。我将如何完成这样的事情?
答案 0 :(得分:1)
我不确定政策是否可以按照您的预期方式运作。在您当前的/config/policies.js
中,只要调用AuthController操作facebook.js
,您就会告诉Sails运行facebook
策略。由于您没有在控制器中定义此类操作,因此策略永远不会运行。对于策略,请求来自哪个方式并不重要,重要的是请求尝试访问哪个控制器操作。
但是,您可以执行的是在每次调用AuthController.register
时运行策略,并在策略文件中添加一行以检查请求是否来自/facebook
。
/config/policies.js:
module.exports.policies = {
auth': {
'register': ['facebook']
}
}
/api/policies/facebook.js:
module.exports = function(req, res, next) {
if (req.route.path === '/facebook') {
facebook_token = req.query.facebook_token;
if(!facebook_token){
res.send('401',{error:"Missing facebook token"});
}
graph.setAccessToken(facebook_token);
graph.get("me",function(err,graph_res){
if(err){
res.send('401',{error:"Facebook authentication error"});
return;
}
else{
next();
}
});
}
else return next();
};