Sails.js 使用自定义策略的路由重定向
Sails.js route redirect with a custom policy
我想达到的情况:
请求 /register 运行 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
中,只要调用 AuthController 操作 facebook
,您就会告诉 Sails 运行 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();
};
我想达到的情况:
请求 /register 运行 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
中,只要调用 AuthController 操作 facebook
,您就会告诉 Sails 运行 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();
};