我对风帆很陌生,但在阅读了文档并在互联网上关注了一些例子后,我决定试一试;)
@H_
696_2@我已经制作了一个依赖于我想在Sails框架中构建的REST Web服务的APP – 但经过大量的研究后我还没有在风帆中找到合适的解决方案.
@H_
696_2@我想我想在从应用程序发出的每个web
service调用中传递(用户名,密码)或api_key?
@H_
696_2@
我找到的所有示例都
只使用会话登录方法 – 而不是每次调用都使用API密钥.
@H_
696_2@我用过这个教程 –
http://jethrokuan.github.io/2013/12/19/Using-Passport-With-Sails-JS.html
@H_
696_2@但只能登录到登录页面 – 我希望
它在每次调用时登录,并且仍然希望使用REST API蓝图中的构建.
@H_
696_2@我的解决方案中的问题是,这样的调用 – 由于默认的REST方法,不会按预期给我所有用户 – 我希望它授权用户并给我结果..
@H_
696_2@
http://example.com:1337/user/?username=test&password=xxx
@H_
696_2@使用REST Web服务后端构建APP的“最佳实践”是什么? – “带帆”
@H_
696_2@我的一些
代码:
// policies/authentication.js
if(req.param('username') && req.param('password')) {
UserAuth.auth(req,res,function(err,user) {
if (err) return res.forbidden('You are not permitted to perform this action.');
if(user) {
return next();
}
});
}else{
return res.forbidden('You are not permitted to perform this action.');
}
// services/UserAuth.js
module.exports = {
auth : function(req,cb) {
var bcrypt = require('bcrypt');
var passport = require("passport");
passport.authenticate('local',user,info){
if (err) return cb({ error: 'auth error!',status: 400 });
if(user) {
cb(null,user);
}
})(req,res);
}
}
// config/policies.js
module.exports.policies = {
'*': "authentication"
};
首先,像这样在野外持续暴露
用户名和密码是不好的做法.至少,您应该
考虑发布一段时间后过期的access_tokens,并且需要通过登录系统重新发布.
@H_
696_2@其次,如果要对每个请求进行身份验证(而不是使用会话),最好使用请求标头进行身份验证,而不是将凭据放在查询字符串中.使用Sails蓝图时尤其如此;否则你将不得不为
keep the blueprints from using your credentials as search criteria做额外的工作.
@H_
696_2@使用标头时,使用Sails的每请求授权变得简单.在api / policies中设置一个名为(
例如)auth.js的策略:
@H_289_20
@module.exports = function (req,next)
{
// Find an access header
var accessToken = req.header('my-auth-header'
);
// No header,no access
if (!accessToken)
{return re
s.forbidden(
);}
// Find the user with that token
User.findOne(
{accessToken: accessToken})
.exec(function(err,user)
{
// Handle error
if (err)
{return next(err
);}
// Handle bad access token
if (!user)
{return re
s.forbidden(
);}
// Handle
success
return next(
);
}
);
}
@H_
696_2@然后,您可以使用
config/policies.js file设置需要身份验证的任何控制器操作:
@H_289_20
@module.exports =
{
someController:
{
'*': 'auth'
},...etc...
}