Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js Ember简单身份验证:刷新时会话丢失_Ember.js_Ember Simple Auth - Fatal编程技术网

Ember.js Ember简单身份验证:刷新时会话丢失

Ember.js Ember简单身份验证:刷新时会话丢失,ember.js,ember-simple-auth,Ember.js,Ember Simple Auth,我正在Ember cli应用程序中使用V0.6.4 我可以很好地登录,但当我刷新页面时,会话将丢失。(在Firefox和Chrome中测试。) 登录后,检查localStorage会立即显示会话,刷新localStorage后会显示为空 以下是我登录时本地存储中的内容: 问题在于,会话中既没有要对会话进行身份验证所需的用户令牌也没有用户电子邮件。因此,只要重新加载页面,验证器的验证器就会拒绝会话。此外,如果没有user\u令牌和user\u电子邮件,则不会实际授权任何请求 您需要将服务器端设备设

我正在Ember cli应用程序中使用V0.6.4

我可以很好地登录,但当我刷新页面时,会话将丢失。(在Firefox和Chrome中测试。)

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

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


问题在于,会话中既没有要对会话进行身份验证所需的
用户令牌
也没有
用户电子邮件
。因此,只要重新加载页面,验证器的验证器就会拒绝会话。此外,如果没有
user\u令牌
user\u电子邮件
,则不会实际授权任何请求


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

我遇到了相同的问题,例如,刷新时我的会话被取消

这是不受欢迎的行为,至少对我来说,似乎与服务器端设计设置没有任何关系


没有向服务器发送任何请求,这只是使用cookies保持会话活动的问题,cookies应该首先检查。

我在simple auth Desive中遇到了同样的问题

问题是在
config/environment.js
中,
identificationAttributeName
被覆盖

ENV['simple-auth-devise'] = {
    identificationAttributeName: 'email'
};
这样,它就不再匹配成功身份验证时由
Users::sessioncontroller
返回的数据,这些数据取自ember simple auth DeVICE自述:

data = {
    token: user.authentication_token,
    user_email: user.email
}
属性名称必须匹配,因此解决方案是在控制器返回的JSON中使用
identificationAttributeName

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

正如Marcow指出的,这一切都是在实施Deave authorizer方法。

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

特别是,更改此处指示的行:

详情如下:

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,我发现这确实是我的问题。

您使用的是自定义验证器吗?通常这些问题的原因是验证器的
restore
方法()没有正确地还原会话。。。我正在使用Deviate验证器。您登录后能否发布
localStorage
内容的屏幕截图?我在原始问题中添加了一个屏幕截图。这是否仅适用于ember simple auth Deviate?通过使用ember simple auth令牌,我似乎也遇到了同样的问题。一旦会话通过身份验证,localStorage就会包含正确的数据。我一刷新,就会被重定向到登录页面,并且本地存储为空。这适用于设备验证器。不知道你所说的“ember简单身份验证令牌”是什么意思。我指的是“ember cli简单身份验证令牌”。顺便说一句,每次我成功登录后重新加载任何受保护的页面时,我都会被重定向到“登录”页面,并且本地存储被清空。我应该做些什么使会话持久化,还是应该在不做任何事情的情况下开箱即用?谢谢,我猜你是指ember-cli-simple-auth-oauth2。会话持久性是现成的。正如我上面所说;在您的代码中,您使用了错误的属性名称-每个验证器都有特定的服务器依赖项,这在READMENo中有解释,我的意思是,它似乎没有任何特定的属性名称或服务器依赖项,所以可能这就是它不起作用的原因。我将查看ember-cli-simple-auth-oauth2,看看这是否解决了我的问题。顺便说一句,感谢这个伟大的cli插件!我认为这应该是一个单独的问题与您自己的设置描述。顺便说一句,我没有否决投票:)在下一版本的Ember Simple Auth中,
identificationAttributeName
的默认值将更改为
“电子邮件”
,以避免混淆(请参阅此提交:)