2014-11-29 5 views
1

У меня есть процесс проверки подлинности 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») будет определено после обновления, я думал, что по умолчанию сессии сохраняется в локальное хранилище. Тот факт, что он аутентифицирован, сохраняется, но это бесполезно без токена, поскольку сервер будет отклонять вызовы на защищенные конечные точки.

ответ

2

Вы хотите реализовать свой собственный custom authenticator, который сначала получает токен от Facebook, а затем отправляет его на ваш собственный сервер, чтобы обменять его на токен для вашего приложения. После этого вы получите бесплатную авторизацию запросов на ember-data, а также сохранность сеанса и т. Д.

Посмотрите на этот пример: https://github.com/simplabs/ember-simple-auth/blob/master/examples/7-multiple-external-providers.html

+0

Спасибо за ответ, - я думал, что я мог бы использовать тории аутентификаторы (у меня было все, что работа) вместо реализации пользовательских из них. Все в порядке, я могу использовать пользовательские из вашего кода. НО, как проходит токен авторизации со всеми последующими аякс-запросами? То, что у меня сейчас, имеет ту же проблему - заголовок авторизации не установлен ... спасибо – prule

+0

, где я сказал «токен авторизации» «Я действительно имел в виду» «Авторизация« HEADER »(который является токеном-носителем, возвращаемым моим сервером и токен, который мой сервер проверяет для каждого запроса на защищенный URL-адрес) – prule

+0

ах, это сделано с помощью специального авторизатора? https://github.com/simplabs/ember-simple-auth#implementing-a-custom-authorizer – prule

Смежные вопросы