有没有人有经验在pre4中使用新路由器创建身份验证机制?
到目前为止,我的一些想法是:
我怀疑我应该使用Ember状态机,但我不知道如何继续。有人解决了这个问题吗?
答案 0 :(得分:51)
更新:就像@DustMason在他的回答中所说,查看真棒embercasts进行身份验证最佳实践。
为了将视图(Ember app)与服务器(Rails应用程序)完全分开,我想使用令牌认证。我可能会在Rails服务器上使用Devise。
有道理。
我需要类似于Ember应用程序中的before_filter等效项,我可以检查是否有当前用户以及该用户是否设置了身份验证令牌。
您可以在路由上添加enter
挂钩,这大致相当于before_filter。但不确定这是检查身份验证令牌的最佳位置。
Rails服务器将在每次调用时返回当前的身份验证令牌。
有道理。我们使用cookie-auth并通过调用/api/me
来获取当前用户配置文件,但两者都应该有效。
如果它返回一个空的身份验证令牌,Ember应用程序应该检测到这一点并转换到未经身份验证的状态,重定向到登录视图。
关于这种方法的意思是(与铁轨不同),“保护”对特定余烬路线的访问并不容易。无论用户总是弹出JS控制台并进入他们想要的任何状态。因此,不要考虑“如果经过身份验证,用户只能进入此状态”,请考虑“如果未经身份验证的用户以某种方式导航到此路线,该怎么办”
我怀疑我应该使用Ember状态机,但我不知道如何继续。有人解决了这个问题吗?
我们的身份验证需求非常简单,因此我们没有发现需要状态机。相反,我们在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属性。
答案 1 :(得分:19)
我建议使用ember-auth。它实现了所有必需的功能,并且在我看来效果很好。
同一作者也有一个demo and tutorial与Devise on Rails。
我还实现了一个基于Ember-auth的基本Ember应用程序,带有Devise令牌认证,以及可以找到here的Google和LinkedIn示例Oauth,并且在此处生效:https://starter-app.herokuapp.com
答案 2 :(得分:12)
我最近从一个定制的auth系统改为使用ember-simple-auth,发现很容易与我的应用程序集成。它满足所有OP要求,并且内置了对刷新令牌的支持。
他们有一个非常好的API和一组很好的例子。任何对基于令牌的身份验证感兴趣的人都应该检查出来。
答案 3 :(得分:4)
新发布的Ember异步路由器在我看来更容易设置好的auth流程!在http://www.embercasts.com/上查看由两部分组成的系列作为一个很好的例子
答案 4 :(得分:3)
Josep的example app非常好。我制作了他的回购副本,以展示如何使用ActiveRecord而不是mongoid,并启用Devise可确认模块。你可以找到它here。这个回购从头开始重建,而不是分叉,因为我想强迫自己完成所有步骤以使其工作。如果我添加一个带有必要更改的分支以使其工作,我将更新此答案。