Ember身份验证最佳做法?

Sea*_*ker 48 ember.js

有没有人有经验在pre4中使用新路由器创建认证机制?

以下是我目前的一些想法:

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

我怀疑我应该使用Ember状态机,但我不知道如何继续.有人解决了这个问题吗?

Mik*_*tti 51

更新:就像@DustMason在他的回答中所说的那样,查看用于身份验证最佳实践的令人敬畏的强制措施.

为了将视图(Ember app)与服务器(Rails应用程序)完全分开,我想使用令牌认证.我可能会在Rails服务器上使用Devise.

说得通.

我需要类似于Ember app中的before_filter等价物,我可以检查是否有当前用户以及该用户是否设置了身份验证令牌.

您可以enter在路由上添加一个钩子,这大致相当于before_filter.但不确定这是检查身份验证令牌的最佳位置.

Rails服务器将在每次调用时返回当前的身份验证令牌.

说得通.我们使用cookie-auth并通过调用获取当前用户配置文件,/api/me但要么应该工作.

如果它返回一个空的身份验证令牌,则Ember应用程序应检测到此并转换到未经身份验证的状态,重定向到登录视图.

关于这种方法的是(与铁轨不同),"保护"对特定余烬路线的访问并不容易.无论用户总是弹出JS控制台并进入他们想要的任何状态.因此,不要考虑"如果经过身份验证,用户只能进入此状态",请考虑"如果未经身份验证的用户以某种方式导航到此路线,该怎么办"

我怀疑我应该使用Ember状态机,但我不知道如何继续.有人解决了这个问题吗?

我们的身份验证需求非常简单,因此我们没有发现需要状态机.相反,我们isAuthenticated在ApplicationController上有一个属性.application.hbs当用户未经过身份验证时,我们使用此属性用登录表单替换主视图.

{{if isAuthenticated}}
  {{render "topnav"}}
  {{outlet}}
{{else}}
  {{render "login"}}
{{/if}}
Run Code Online (Sandbox Code Playgroud)

从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;
  }
});
Run Code Online (Sandbox Code Playgroud)

然后我们的ApplicationController根据返回的配置文件计算它的isAuthenticated属性.

  • 我接受了标记,因为这让我走上正轨.你能否详细说明你所做的评论:"有道理.我们使用cookie-auth并通过调用/ api/me来获取当前的用户配置文件,但两者都应该有效." 什么是cookie-auth?您是否仍然使用令牌身份验证并在登录后将令牌存储在cookie中? (2认同)
  • 如果ember应用程序认为它已经过身份验证但不是(例如服务器已过期会话密钥)该怎么办?它如何检测此状态并重定向回登录表单? (2认同)
  • @adamsmith这是一个很好的问题.对我们来说不是问题,但我可以看到它可能是什么.理想情况下,您的API将在下次进行API调用时返回"HTTP 403".然后自定义您的ember-data适配器来处理这种情况并修改应用程序控制器的`isAuthenticated`属性. (2认同)

sub*_*ing 19

我建议使用ember-auth.它实现了所有必需的功能,并且在我看来效果很好.

此外,同一作者还提供了Devise on Rails 的演示和教程.

我还实现了一个基于Ember-auth的基本Ember应用程序,带有Devise令牌认证和示例Oauth for Google和LinkedIn,可在此处找到并在此处发布:https://starter-app.herokuapp.com


Mar*_*ard 12

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

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