Emberauthentication最佳实践?
有没有人有与pre4的新路由器创build身份validation机制的经验?
以下是我目前的一些想法:
- 为了完全分离视图(Ember应用程序)从服务器(Rails应用程序),我想使用令牌authentication。 我可能会在Rails服务器上使用Devise。
- 我需要在Ember应用程序中像before_filter等效的东西,我可以检查是否有当前用户,如果该用户有一个身份validation令牌集。
- Rails服务器将在每次调用时返回当前的authentication令牌。 如果它返回一个空身份validation令牌,Ember应用程序应该检测到这个并转换到未经身份validation的状态,redirect到login视图。
我怀疑我应该使用Ember状态机,但我不知道如何继续。 任何人都解决了这个问题呢?
更新:就像@DustMason在他的回答中所说的那样,查看authentication最佳实践的真棒解决scheme。
- 客户端authentication第一部分
- 客户端authentication第二部分
为了完全分离视图(Ember应用程序)从服务器(Rails应用程序),我想使用令牌authentication。 我可能会在Rails服务器上使用Devise。
说得通。
我需要在Ember应用程序中像before_filter等效的东西,我可以检查是否有当前用户,如果该用户有一个身份validation令牌集。
你可以在路由上添加一个enter
钩,这大致相当于一个before_filter。 但不知道这是检查auth令牌的最佳位置。
Rails服务器将在每次调用时返回当前的authentication令牌。
说得通。 我们使用cookie-auth并通过调用/api/me
获取当前的用户configuration文件,但是两者都应该工作。
如果它返回一个空身份validation令牌,Ember应用程序应该检测到这个并转换到未经身份validation的状态,redirect到login视图。
关于这种方法的事情是(不同于rails),“保护”访问特定的内部路由并不容易。 不pipe用户什么时候可以popup打开JS控制台,并进入任何他们想要的状态。 因此,不要认为“用户只能进入这种状态,如果authentication”考虑“如果未经authentication的用户以某种方式导航到这条路线”
我怀疑我应该使用Ember状态机,但我不知道如何继续。 任何人都解决了这个问题呢?
我们的身份validation需求非常简单,所以我们还没有发现需要状态机。 相反,我们在ApplicationController上有一个isAuthenticated
属性。 在用户未通过身份validation时,我们使用application.hbs
此属性将主视图replace为login表单。
{{if isAuthenticated}} {{render "topnav"}} {{outlet}} {{else}} {{render "login"}} {{/if}}
从ApplicationRoute,我们获取用户configuration文件:
App.ApplicationRoute = Ember.Route.extend({ model: function() { var profiles; profiles = App.Profile.find({ alias: 'me' }); profiles.on("didLoad", function() { return profiles.resolve(profiles.get("firstObject")); }); return profiles; } });
然后我们的ApplicationController根据返回的configuration文件计算它的isAuthenticated属性。
我会build议使用ember-auth 。 它实现了所有需要的function,在我看来工作得很好。
同样的作者还有一个Devise on Rails的演示和教程 。
我也已经实现了一个基于Ember-auth的基本Ember应用程序,这个应用程序基于Devise令牌authentication,以及谷歌和LinkedIn上的示例Oauth,可以在这里find并且在这里: https : //starter-app.herokuapp.com
我最近从一个定制的身份validation系统改为使用ember-simple-auth ,发现与我的应用程序很容易集成。 它满足所有的OP要求,并且已经build立了对刷新令牌的支持。
他们有一个非常好的API和一个很好的例子。 任何对基于令牌的身份validation感兴趣的人都应该检查它。
新发布的Emberasynchronous路由器使我认为设置一个很好的authenticationstream程更简单! 查看http://www.embercasts.com/上的两部分系列就是一个很好的例子;
Josep的示例应用程序非常好。 我做了一个他的回购副本,以显示如何使用ActiveRecord而不是mongoid,并启用devise确认模块。 你可以在这里find它。 这个回购是从头开始重build,而不是分手,因为我想强迫自己通过所有的步骤来实现它的工作。 我会更新这个答案,如果我添加一个分叉必要的变化,以使其工作。