更新:像@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财产。
我标记为接受,因为这让我走上了正轨。你能否详细说明你所做的评论:“有道理,我们使用cookie-auth并通过调用/ api/me获取当前用户配置文件,但两者都应该工作。”什么是cookie-auth?登录后,您仍使用令牌认证并将令牌存储在cookie中吗? –
当然 - 猜测“cookie-auth”并不是真的。我的意思是我们正在使用rails cookie-store进行会话。我们的API期望用户拥有一个有效的会话,并在请求/ api/me时返回current_user。 –
快速提示,但您提到的“'enter'”钩现在已被弃用,取而代之的是“activate”(和相应的“deactivate'”) –