Javascript 通过Flatiron'认证和授权;s足智多谋&;宁静的
我想在堆栈中实现身份验证和授权(使用Flatiron、Resourceful和Restful)。我想要求用户在尝试更改资源时具有必要的权限。在Restful自述文件中,有一个: 有几种方法可以为提供安全性和授权 访问restful公开的资源方法。推荐的 授权模式是在 和挂钩后的Javascript 通过Flatiron'认证和授权;s足智多谋&;宁静的,javascript,node.js,flatiron.js,Javascript,Node.js,Flatiron.js,我想在堆栈中实现身份验证和授权(使用Flatiron、Resourceful和Restful)。我想要求用户在尝试更改资源时具有必要的权限。在Restful自述文件中,有一个: 有几种方法可以为提供安全性和授权 访问restful公开的资源方法。推荐的 授权模式是在 和挂钩后的。在这些钩子中,您可以添加额外的业务逻辑 限制对资源方法的访问 不建议在路由中放置授权逻辑 层,在理想世界中,路由器将是一个反射接口 资源的使用。从理论上讲,路由器本身的安全性应该 有些不相关,因为资源可能有多个 反映了所
。在这些钩子中,您可以添加额外的业务逻辑
限制对资源方法的访问
不建议在路由中放置授权逻辑
层,在理想世界中,路由器将是一个反射接口
资源的使用。从理论上讲,路由器本身的安全性应该
有些不相关,因为资源可能有多个
反映了所有需要相同业务逻辑的接口
TL;博士为了安全和授权,您应该使用resourceful的
之前
和之后
挂钩。
所以授权可以通过Resourceful的挂钩系统来处理
我的实际问题是每个HTTP请求开始时的身份验证过程
假设我有一个资源Post
,一个用户
和一个资源会话
。RESTAPI是使用Restful定义的。我对这个问题的主要关注是确保用户在创建帖子时有一个会话。其他方法,如保存
,更新
或其他资源,如创建用户,也应类似地工作
文件app.js
:
var flatiron = require('flatiron');
var app = flatiron.app;
app.resources = require('./resources.js');
app.use(flatiron.plugins.http);
app.use(restful);
app.start(8080, function(){
console.log('http server started on port 8080');
});
var resourceful = require('resourceful');
var resources = exports;
resources.User = resourceful.define('user', function() {
this.restful = true;
this.string('name');
this.string('password');
});
resources.Session = resourceful.define('session', function() {
// note: this is not restful
this.use('memory');
this.string('session_id');
});
resources.Post = resourceful.define('post', function() {
this.restful = true;
this.use('memory');
this.string('title');
this.string('content');
});
resources.Post.before('create', function authorization(post, callback) {
// What should happen here?
// How do I ensure, a user has a session id?
callback();
});
文件resources.js
:
var flatiron = require('flatiron');
var app = flatiron.app;
app.resources = require('./resources.js');
app.use(flatiron.plugins.http);
app.use(restful);
app.start(8080, function(){
console.log('http server started on port 8080');
});
var resourceful = require('resourceful');
var resources = exports;
resources.User = resourceful.define('user', function() {
this.restful = true;
this.string('name');
this.string('password');
});
resources.Session = resourceful.define('session', function() {
// note: this is not restful
this.use('memory');
this.string('session_id');
});
resources.Post = resourceful.define('post', function() {
this.restful = true;
this.use('memory');
this.string('title');
this.string('content');
});
resources.Post.before('create', function authorization(post, callback) {
// What should happen here?
// How do I ensure, a user has a session id?
callback();
});
还有一个(谢谢@generalhenry)
因此,假设一个用户试图创建一个post,并且已经获得了一个会话id,该id随cookie头发出的每个请求一起发送。如何访问before钩子中的cookie(即authorization
回调)
该示例可以从node app.js
开始,并且可以使用curl
发出HTTP请求。请记住,这些指南用于授权过程。如果您需要使用sessionId,您可以通过以下两种方式访问它:req.sessionId
,req.cookies[“connect.sid”]
通过这种方式检查请求,您将确保每个用户都有有效的会话id
app.use(flatiron.plugins.http, {
before: [
connect.favicon(),
connect.cookieParser('catpsy speeds'),
function(req, res) {
if (req.originalUrl === undefined) {
req.originalUrl = req.url;
}
res.emit('next');
},
connect.session({secret : 'secter'}),
function(req, res) {
console.log('Authenticating...');
console.dir(req.session);
//any other validation logic
if (req.url !== '/login' && typeof req.session.user == 'undefined') {
res.redirect('/login');
} else {
res.emit('next');
}
}
]
});
这里是使用这种方法。我制作了一个可运行的版本@generalhenry谢谢!让我们来玩这个,谢谢你的例子。这很有帮助。我不在工作,所以我不能立即尝试,但它看起来很有希望,尽管它需要connect
,而我目前没有使用它。但我想我能弄清楚它的作用。顺便说一句,我改进了缩进,因此它更具可读性,我认为val===undefined
不是一个好的做法,所以我将它改为typeof val=='undefined'
。我不确定这一点。在第4点和第5点查看jquery项目的最佳实践。我仍然认为typeof val==“undefined”
更好,但还行。