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,而不是分手,因为我想强迫自己通过所有的步骤来实现它的工作。 我会更新这个答案,如果我添加一个分叉必要的变化,以使其工作。