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(); };