有没有人有经验在pre4中使用新路由器创建认证机制?
以下是我目前的一些想法:
我怀疑我应该使用Ember状态机,但我不知道如何继续。 有人解决了这个问题吗?
更新:就像@DustMason在他的回答中所说的那样,查看用于身份验证最佳实践的令人敬畏的强制措施。
为了将视图(Ember app)与服务器(Rails应用程序)完全分开,我想使用令牌认证。 我可能会在Rails服务器上使用Devise。
说得通。
我需要类似于Ember app中的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属性。
我建议使用ember-auth 。 它实现了所有必需的功能,并且在我看来效果很好。
此外,同一作者还提供了Devise on Rails的演示和教程 。
我还实现了一个基于Ember-auth的基本Ember应用程序,带有Devise令牌认证和示例Oauth for Google和LinkedIn,可在此处找到并在此处发布: https : //starter-app.herokuapp.com
我最近从一个定制的auth系统改为使用ember-simple-auth ,发现它很容易与我的应用程序集成。 它满足所有OP要求,并且内置了对刷新令牌的支持。
他们有一个非常好的API和一组很好的例子。 对基于令牌的身份验证感兴趣的任何人都应该检查它。
在我看来,新发布的Ember异步路由器使得设置一个很好的auth流程更加容易! 查看http://www.embercasts.com/上的两部分系列文章,以获得一个很好的例子