ember-simple-auth: сохранение сеанса в локальном хранилище с использованием специального средства проверки подлинности
Настроить:
- Ember: 2.0.2
- Ember Data: 2.0.1
- jQuery: 1.11.3
- Ember Simple Auth: 1.0.0 (jjAbrams Branch)
- Ember CLI: 1.13.8
Я использую претендент, чтобы издеваться над сервером.
USECASE:
Использование собственного аутентификатора для взаимодействия с сервером.
Есть 2 маршрута: вход в систему, защищенный (и по умолчанию индекс, приложение)
Когда я вхожу в систему с правильными учетными данными, вызывается метод аутентификации аутентификатора, и он успешно регистрирует объект ответа, который передается для разрешения ().
Замечания:
После входа в систему и перенаправления на защищенную страницу, Обновление защищенного маршрута (который имеет
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; Как мне сохранить сеанс?
1 ответ
Наконец-то у меня все получилось. Ember 2.0 и ESA 1.0
Вот шаги, которые я предпринял:
- Создать новый Ember Cli Project
- Обновите значения данных Ember и ember до ^2.0.0 в bower.json Source
- Добавить ESA jjAbrams dep в пакет.json Source
- запустите npm install && bower install
Gotchas: (Это была первоначальная проблема, которая вызвала проблемы, описанные в вопросе)
- Если вы обновляете более старые версии ESA, все ссылки на 'simple-auth /..' должны быть обновлены, чтобы вместо них ссылаться на 'ember-simple-auth /..'.... Это включает импорт для аутентификаторов, авторизаторов, хранит, смешивает и ключ конфигурации в файле config / environment.js.
Все это не должно быть проблемой, когда выйдут ESA 1.0 и Ember Cli для Ember 2.0:)