У меня есть процесс проверки подлинности oauth2, где я получаю токен доступа (например, из facebook) с использованием ember simple auth, отправляю его на задний конец, который вызывает fb.me(), а затем использует JWT для создания токена. Этот токен затем отправляется обратно в приложение ember, которое затем должно отправлять его с каждым запросом сервера, включая те запросы, сделанные данными ember-data.ember простой сеанс auth, данные ember и передача заголовка авторизации
Мне также нужно иметь этот токен, доступный после перезагрузки браузера.
Я пробовал много вариантов, где я установил свойство authToken в сеансе - я считаю, что для сохранения аутентифицированного сеанса используется локальное хранилище.
Но у меня всегда возникают проблемы с координацией поиска этого токена - либо у меня нет доступа к сеансу, либо токен больше не находится в сеансе, либо я не могу изменить заголовки данных ember ,
У кого-нибудь есть простой пример того, как это можно сделать - я думаю, что это должно быть легко, но я, очевидно, что-то пропустил!
Спасибо.
Update
Единственное, что я был в состоянии получить работу, чтобы использовать тории, как показано ниже, но содержание сеанса все еще потеряно на обновления - я могу видеть его еще проверку подлинности, но его потерянная токен, который я установил здесь. Поэтому я все еще ищу реальное решение.
authenticateWithGooglePlus: function() {
var self = this;
this.get('session').authenticate('simple-auth-authenticator:torii', 'google-oauth2')
.then(function() {
resolveCodeToToken(self.get('session'), self);
});
}
resolveCodeToToken получает маркер носителя с сервера, устанавливает его на сессии, а затем переходит на защищенную страницу:
function resolveCodeToToken(session, route) {
var authCode = session.content.authorizationCode;
var type = session.content.provider.split('-')[0];
$.ajax({
url: 'http://localhost:4200/api/1/user/auth/' + type,
data: {authCode: authCode}
}).done(function (response) {
// todo handle invalid cases - where user is denied access eg user is disabled
session.set('authToken', response.token);
route.transitionTo('activity', moment().format('DDMMYYYY'));
});
}
И у меня есть пользовательский Authorizer для ввода маркера (хранится в сессия) по каждому запросу:
import Base from 'simple-auth/authorizers/base';
export default Base.extend({
authorize: function(jqXHR, requestOptions) {
var accessToken = this.get('session.content.authToken');
if (this.get('session.isAuthenticated') && !Ember.isEmpty(accessToken)) {
jqXHR.setRequestHeader('Authorization', accessToken);
}
}
});
Я не знаю, почему this.get («session.content.authToken») будет определено после обновления, я думал, что по умолчанию сессии сохраняется в локальное хранилище. Тот факт, что он аутентифицирован, сохраняется, но это бесполезно без токена, поскольку сервер будет отклонять вызовы на защищенные конечные точки.
Спасибо за ответ, - я думал, что я мог бы использовать тории аутентификаторы (у меня было все, что работа) вместо реализации пользовательских из них. Все в порядке, я могу использовать пользовательские из вашего кода. НО, как проходит токен авторизации со всеми последующими аякс-запросами? То, что у меня сейчас, имеет ту же проблему - заголовок авторизации не установлен ... спасибо – prule
, где я сказал «токен авторизации» «Я действительно имел в виду» «Авторизация« HEADER »(который является токеном-носителем, возвращаемым моим сервером и токен, который мой сервер проверяет для каждого запроса на защищенный URL-адрес) – prule
ах, это сделано с помощью специального авторизатора? https://github.com/simplabs/ember-simple-auth#implementing-a-custom-authorizer – prule