Ember Simple Auth:会话在刷新时丢失

时间:2014-08-09 03:40:39

标签: ember.js ember-simple-auth

我在Ember-cli应用中使用Ember Simple Auth Devise v 0.6.4。

我可以正常登录但是当我刷新页面时会话丢失。 (在Firefox和Chrome中测试过。)

登录后,检查localStorage会显示会话,刷新localStorage后为空。

以下是我登录时本地存储空间中的内容:

enter image description here

4 个答案:

答案 0 :(得分:10)

问题是会话中的user_tokenuser_email都没有进行身份验证所需的会话。因此,只要您重新加载页面,验证者的restore method就会拒绝该会话。如果没有user_tokenuser_emailauthorizer也不会实际授权任何请求。

您需要将服务器端设备设置更改为described here

答案 1 :(得分:2)

我遇到了与simple-auth-devise相同的问题。

问题在于config/environment.js identificationAttributeName被覆盖了。

ENV['simple-auth-devise'] = {
    identificationAttributeName: 'email'
};

通过这样做,它不再匹配Users::SessionsController成功验证时返回的数据,取自ember-simple-auth-devise自述文件:

data = {
    token: user.authentication_token,
    user_email: user.email
}

属性名称必须匹配,因此解决方案是使用控制器返回的JSON中的identificationAttributeName

data = {
    token: user.authentication_token,
    email: user.email
}

就像marcoow所指出的那样,所有这些都是在Devise授权器restore()方法的实现中。

答案 2 :(得分:0)

我遇到了同样的问题,例如我的会议正在刷新。

这是不受欢迎的行为,对我而言,至少似乎与服务器端设备设置无关。

没有请求被发送到服务器,只是通过使用应首先检查的cookie来保持会话活跃。

答案 3 :(得分:0)

我也有这个问题。事实证明,身份验证器中的还原方法没有考虑资源名称。

特别是,更改此处显示的行:https://github.com/simplabs/ember-simple-auth/blob/master/packages/ember-simple-auth-devise/lib/simple-auth-devise/authenticators/devise.js#L95

如下:

if (!Ember.isEmpty(propertiesObject.get(_this.resourceName)[_this.tokenAttributeName]) && !Ember.isEmpty(propertiesObject.get(_this.resourceName)[_this.identificationAttributeName])) {

解决了这个问题。

请注意,我的本地存储空间如下:

{"secure":{"authenticator":"simple-auth-authenticator:devise","user":{"id":1,"email":"test@gmail.com","created_at":"2015-07-20T22:30:47.966Z","updated_at":"2015-07-23T17:45:41.874Z","authentication_token":"7Uv6LysQ2h3x-P4WUMmU","token":"7Uv6LysQ2h3x-P4WUMmU"}}}

因此,这需要config / environment.js

中的其他更改
  ENV['simple-auth-devise'] = {
    identificationAttributeName: 'email',
    resourceName: 'user',
    tokenAttributeName: 'authentication_token',
    crossOriginWhitelist: ['*']   
  };

更改bower_components / ember-simple-auth / simple-auth-devise.amd.js让我看到这确实是我的问题。