ember-simple-auth:使用自定义身份验证器在本地存储中保留会话
ember-simple-auth: Persisting session in localstorage using custom authenticator
设置:
- Ember : 2.0.2
- Ember 数据:2.0.1
- jQuery : 1.11.3
- Ember 简单验证:1.0.0(jjAbrams 分支)
- Ember 命令行界面:1.13.8
我正在使用伪装者模拟服务器。
用例:
使用自定义身份验证器与服务器交互。
有 2 条路由:登录、受保护(默认情况下是索引、应用程序)
当我使用正确的凭据登录时,验证器的验证方法被调用并成功记录传递给 resolve() 的响应对象。
观察:
登录并被定向到受保护页面后,刷新受保护路由(具有AuthenticatedRouteMixin
)会返回登录页面。
即使登录成功,Localstorage 也没有绑定任何值。
登录前:ember_simple_auth:session -> {"authenticated":{}}
restore()
从未调用过身份验证器的方法。
认证后从受保护的路由转到另一条路由,返回后再次进入登录页面。
//authenticators/custom.js
import Ember from 'ember';
import Base from 'ember-simple-auth/authenticators/base';
export default Base.extend({
restore: function (data) {
return new Ember.RSVP.Promise(function (resolve, reject) {
console.log("RESOLVE",data);
if (!Ember.isEmpty(data.token)) {
//TODO Remove log
resolve(data);
} else {
console.log("REJECTING",data);
reject();
}
});
},
authenticate(credentials) {
return new Ember.RSVP.Promise((resolve, reject) =>
Ember.$.ajax({
url: '/token',
type: 'POST',
data: JSON.stringify({
email: credentials.identification,
password: credentials.password
}),
contentType: 'application/json;charset=utf-8',
dataType: 'json'
}).then(function (response) {
Ember.run(function () {
//This logs the expected information
console.log("Response", response, response.token, response.user);
resolve(response);
});
}, function (xhr, status, error) {
console.log("error", error, xhr.responseText);
var response = xhr.responseText;
Ember.run(function () {
reject(response);
});
}));
},
invalidate(token) {
return API.logout(token);
}
});
//environment.js
ENV['ember-simple-auth'] = {
store: 'session-store:local-storage',
routeAfterAuthentication: '/protected'
};
TLDR;
如何使会话持续存在?
我终于让所有的东西一起工作了。 Ember 2.0 和 ESA 1.0
以下是我采取的步骤:
- 创建一个新的 ember cli 项目
- 将 Ember 和 ember 数据值更新为 bower.json Source
中的 ^2.0.0
- 将 ESA jjAbrams 部门添加到 package.json Source
- 运行 npm 安装 && bower 安装
陷阱:(这是导致问题中描述的问题的原始问题)
- 如果您从旧版本的 ESA 升级,所有对 'simple-auth/..' 的引用都应更新为引用 'ember-simple-auth/..'。
.. 这包括 config/environment.js 文件中的身份验证器、授权器、商店、mixins 和 Config 密钥的导入。
一旦 ESA 1.0 和 Ember Cli for Ember 2.0 出来,所有这些都不应该成为问题:)
设置:
- Ember : 2.0.2
- Ember 数据:2.0.1
- jQuery : 1.11.3
- Ember 简单验证:1.0.0(jjAbrams 分支)
- Ember 命令行界面:1.13.8
我正在使用伪装者模拟服务器。
用例:
使用自定义身份验证器与服务器交互。
有 2 条路由:登录、受保护(默认情况下是索引、应用程序)
当我使用正确的凭据登录时,验证器的验证方法被调用并成功记录传递给 resolve() 的响应对象。
观察:
登录并被定向到受保护页面后,刷新受保护路由(具有
AuthenticatedRouteMixin
)会返回登录页面。即使登录成功,Localstorage 也没有绑定任何值。 登录前:
ember_simple_auth:session -> {"authenticated":{}}
restore()
从未调用过身份验证器的方法。认证后从受保护的路由转到另一条路由,返回后再次进入登录页面。
//authenticators/custom.js
import Ember from 'ember';
import Base from 'ember-simple-auth/authenticators/base';
export default Base.extend({
restore: function (data) {
return new Ember.RSVP.Promise(function (resolve, reject) {
console.log("RESOLVE",data);
if (!Ember.isEmpty(data.token)) {
//TODO Remove log
resolve(data);
} else {
console.log("REJECTING",data);
reject();
}
});
},
authenticate(credentials) {
return new Ember.RSVP.Promise((resolve, reject) =>
Ember.$.ajax({
url: '/token',
type: 'POST',
data: JSON.stringify({
email: credentials.identification,
password: credentials.password
}),
contentType: 'application/json;charset=utf-8',
dataType: 'json'
}).then(function (response) {
Ember.run(function () {
//This logs the expected information
console.log("Response", response, response.token, response.user);
resolve(response);
});
}, function (xhr, status, error) {
console.log("error", error, xhr.responseText);
var response = xhr.responseText;
Ember.run(function () {
reject(response);
});
}));
},
invalidate(token) {
return API.logout(token);
}
});
//environment.js
ENV['ember-simple-auth'] = {
store: 'session-store:local-storage',
routeAfterAuthentication: '/protected'
};
TLDR; 如何使会话持续存在?
我终于让所有的东西一起工作了。 Ember 2.0 和 ESA 1.0
以下是我采取的步骤:
- 创建一个新的 ember cli 项目
- 将 Ember 和 ember 数据值更新为 bower.json Source 中的 ^2.0.0
- 将 ESA jjAbrams 部门添加到 package.json Source
- 运行 npm 安装 && bower 安装
陷阱:(这是导致问题中描述的问题的原始问题)
- 如果您从旧版本的 ESA 升级,所有对 'simple-auth/..' 的引用都应更新为引用 'ember-simple-auth/..'。 .. 这包括 config/environment.js 文件中的身份验证器、授权器、商店、mixins 和 Config 密钥的导入。
一旦 ESA 1.0 和 Ember Cli for Ember 2.0 出来,所有这些都不应该成为问题:)