Sails.js路由redirect与自定义策略
我想要达到的情况:
请求/注册运行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政策中的代码不会被调用。 我将如何完成这样的事情?
我不确定政策是否可以按照您预期的方式进行工作。 在你当前的/config/policies.js
你告诉Sails在调用AuthController动作facebook
时运行facebook.js
策略。 由于您在控制器中没有定义此类操作,因此策略从未运行。 对于策略,请求来自哪个方式并不重要,重要的是请求尝试访问哪个控制器操作。
但是,您可以做的是在每次调用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(); };