2013-02-01 128 views
48

有没有人有经验在pre4中使用新路由器创建身份验证机制?Ember认证最佳实践?

下面是我的一些想法至今:

  • 为了从我要使用令牌认证服务器(Rails应用程序)的视图(恩伯APP)完全分离。我可能会在Rails服务器上使用Devise。
  • 我需要类似于Ember应用程序中的before_filter等价物,我可以检查是否存在当前用户以及该用户是否具有身份验证令牌集。
  • Rails服务器将在每次调用时返回当前的认证令牌。如果它返回一个空认证令牌,Ember应用程序应该检测到这个并转换到未认证状态,重定向到登录视图。

我怀疑我应该使用一个Ember状态机,但我不确定如何继续。任何人都解决了这个问题呢?

回答

51

更新:像@DustMason在他的回答中说,检查真棒embercasts认证最佳做法。

为了从服务器(Rails应用程序)的视图(灰烬应用程序)我想使用令牌认证完全分离。我可能会在Rails服务器上使用Devise。

有道理。

我需要类似于Ember应用程序中的before_filter等价物,我可以检查是否存在当前用户以及该用户是否具有身份验证令牌集。

您可以在路由上添加enter挂钩,这大致相当于before_filter。但不知道这是检查auth令牌的最佳位置。

Rails服务器将在每次调用时返回当前的认证令牌。

有道理。我们使用cookie-auth并通过调用/api/me来获取当前用户配置文件,但两者都应该有效。

如果它返回一个空验证令牌,Ember应用程序应该检测到并转换到未验证状态,重定向到登录视图。

关于这种方法的事情是(与rails不同),“保护”访问特定的烬路由并不容易。无论用户什么时候可以弹出JS控制台并输入他们想要的任何状态。因此,而不是想着“用户只能进入这个状态,如果认证”考虑“假设未认证用户以某种方式浏览到这条路线”

我怀疑我应该使用灰烬状态机这一点,但我不确定如何继续。任何人都解决了这个问题呢?

我们的认证需求非常简单,所以我们没有找到需要状态机。相反,我们在ApplicationController上有一个isAuthenticated属性。当用户未通过身份验证时,我们使用application.hbs中的此属性将主视图替换为登录表单。

{{if isAuthenticated}} 
    {{render "topnav"}} 
    {{outlet}} 
{{else}} 
    {{render "login"}} 
{{/if}} 

从ApplicationRoute,我们获取用户的个人资料:

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计算它是基于被返回的轮廓isAuthenticated财产。

+2

我标记为接受,因为这让我走上了正轨。你能否详细说明你所做的评论:“有道理,我们使用cookie-auth并通过调用/ api/me获取当前用户配置文件,但两者都应该工作。”什么是cookie-auth?登录后,您仍使用令牌认证并将令牌存储在cookie中吗? –

+0

当然 - 猜测“cookie-auth”并不是真的。我的意思是我们正在使用rails cookie-store进行会话。我们的API期望用户拥有一个有效的会话,并在请求/ api/me时返回current_user。 –

+1

快速提示,但您提到的“'enter'”钩现在已被弃用,取而代之的是“activate”(和相应的“deactivate'”) –

19

我建议使用ember-auth。它实现了所有需要的功能,并且在我看来工作得很好。

另外还有一个demo and tutorial Devise on Rails由同一个作者。

我也已经实现了基于Ember公司-auth的与设计令牌认证和榜样的Oauth谷歌和LinkedIn,可以发现here,是住在这里一个基本的灰烬应用:https://starter-app.herokuapp.com

+1

你的例子真的很好,谢谢。 –

3

何塞普的example app是非常好的。我制作了他的回购副本,以展示如何使用ActiveRecord而不是mongoid来执行此操作,并启用设计可确认模块。你可以找到它here。这个回购是从头开始重建的,而不是分手,因为我想强迫自己通过所有步骤来实现它。我会更新这个答案,如果我添加一个必要的变化,使其工作的分叉。

+0

很好,谢谢Josep。我会在本周的某个时间完成这项工作。 – jhosteny

+0

非常感谢您对ActiveRecord支持的非常有用的贡献。 – joscas

4

新发布的Ember异步路由器使我认为设置一个很好的认证流程更简单!查看http://www.embercasts.com/的两部分系列,举一个例子

+0

回复上面的评论后,Lol刚刚看到了这个。很好的回答... –

12

我最近从一个定制的认证系统改为使用ember-simple-auth,发现它很容易与我的应用程序集成。它满足所有OP的要求,并且还支持刷新令牌。

他们有一个非常好的API和一套很好的例子。任何对基于令牌的身份验证感兴趣的人都应该检查它。