2015-11-30 3 views
2

Я обновляю мой существующий код сделано в Ember-простой-AUTH: 0.8.0 для Ember-простой-авторизации: 1.0.1Ember простой аутентификации 1.0.1 пользовательские аутентификатор

Есть две проблемы

  1. Не выполняется сеанс
  2. REST Вызовы, требуемые для наличия сCredentials: true, не знаю, где я могу их установить.

Вот мой код

//config/environment.js 
    ENV['ember-simple-auth'] = { 
    store: 'simple-auth-session-store:local-storage', 
    authorizer: 'authorizer:custom', 

    routeAfterAuthentication: '/dashboard', 
    routeIfAlreadyAuthenticated: '/dashboard' 
    }; 

Мой аутентификатор

//authenticators/custom.js 
import Ember from 'ember'; 
import Base from 'ember-simple-auth/authenticators/base'; 
import config from '../config/environment'; 

export default Base.extend({ 
    restore(data) { 
    return new Ember.RSVP.Promise(function (resolve, reject) { 
     if (!Ember.isEmpty(data.token)) { 
     resolve(data); 
     } 
     else { 
     reject(); 
     } 
    }); 
    }, 

    authenticate(options) { 
    return new Ember.RSVP.Promise(function(resolve, reject) { 
     Ember.$.ajax({ 
     type: "POST", 
     url: config.serverURL + '/api/users/login', 
     data: JSON.stringify({ 
      username: options.identification, 
      password: options.password 
     }), 
     contentType: 'application/json;charset=utf-8', 
     dataType: 'json' 
     }).then(function(response) { 
     Ember.run(function() { 
      resolve(response); 
     }); 
     }, function(xhr) { 
     Ember.run(function() { 
      reject(xhr.responseJSON || xhr.responseText); 
     }); 
     }); 
    }); 
    }, 

    invalidate(data) { 
    return new Ember.RSVP.Promise(function(resolve, reject) { 
     Ember.$.ajax({ 
     type: "POST", 
     url: config.serverURL + '/api/users/logout' 
     }).then(function(response) { 
     Ember.run(function() { 
      resolve(response); 
     }); 
     }, function(xhr) { 
     Ember.run(function() { 
      reject(xhr.responseJSON || xhr.responseText); 
     }); 
     }); 
    }); 
    } 
}); 

Мой доверитель (вы можете увидеть, что я пытаюсь обновить свой старый код)

//authorizers/custom.js 
import Ember from 'ember'; 
import Base from 'ember-simple-auth/authorizers/base'; 

export default Base.extend({ 
    authorize(sessionData, block) { 
    if (!Ember.isEmpty(sessionData.token)) { 
     block('X-CSRF-Token', sessionData.token); 
     block('Content-Type', 'application/json;charset=utf-8'); 
     block('withCredentials', true); 
    } 
    } 

    //authorize(jqXHR, requestOptions) { 
    // if (!(requestOptions.data instanceof FormData)){ 
    // requestOptions.contentType = 'application/json;charset=utf-8'; 
    // } 
    // 
    // requestOptions.crossDomain = true; 
    // requestOptions.xhrFields = { 
    // withCredentials: true 
    // }; 
    // 
    // 
    // var token = this.get('session.token'); 
    // console.error(jqXHR); 
    // if (this.get('session.isAuthenticated')) { 
    // jqXHR.setRequestHeader('X-CSRF-Token', token); 
    // } 
    //} 
}); 

Мои адаптер приложения

import DS from 'ember-data'; 
    import config from '../../config/environment'; 
    import DataAdapterMixin from 'ember-simple-auth/mixins/data-adapter-mixin'; 

    export default DS.RESTAdapter.extend(DataAdapterMixin, { 
     authorizer: 'authorizer:custom', 
     namespace: 'api', 
     host: config.serverURL, 
    }); 

Dashboard

import Ember from 'ember'; 

    import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; 

    export default Ember.Route.extend(AuthenticatedRouteMixin, { 
     session: Ember.inject.service('session'), 

     needs: 'application', 
     setupController: function(controller, model){ 
      this.controllerFor('application').set('pageTitle', 'Dashboard'); 
      this._super(controller, model); 
     } 
    }); 

Если я console.log(this.get('session.isAuthenticated'); это возвращает меня так, но когда я использую это в шаблоне она не работают

{{#if session.isAuthenticated}} 
     1 
    {{else}} 
     0 
    {{/if}} 

На моем конце Laravel, я могу видеть, что сессия и пользователь вошел в систему на стороне Ember, он ранее устанавливал сеанс, а затем повторно передавал учетные данные с каждым запросом. Теперь, когда он отправляет другой запрос. Я думаю, что это без credentials: True, и laravel возвращает 401. Я также попытался отправить заголовок мусора и laravel. CORS отказался, чтобы он не был разрешен заголовками.

Спасибо

ответ

0

Настройка конфигурации доверителя больше не существует в 1.0, так как автоматическая авторизация уронила. Смотрите API документацию для информации о том, как добавить разрешение исходящих запросов:

Кроме того, ваш доверитель не должен вызвать блок несколько раз, но только те, передавая все данные авторизации однажды.

Также убедитесь, что вы впрыснуть службу сеанса во все контроллеры и компоненты для шаблонов, которые вы используете сессию в.

+0

а) я использовал адаптер данных подмешать. b) Я не уверен, что мой код вызывает блок несколько раз. c) у моего приложения сейчас есть 44 маршрута, и у него будет 2k + маршрута. почему я должен вводить сеанс в любом месте, пока я был в состоянии сделать это раньше, не добавляя их –

+1

'block ('X-CSRF-Token', sessionData.token); block ('Content-Type', 'application/json; charset = utf-8 '); block (' withCredentials ', true); '. Если вы не хотите вводить услугу в каждый маршрут, вы также можете настроить автоматическую инъекцию через контейнер в инициализаторе. – marcoow

+0

Хм, я следовал тому, что вы предложили, теперь есть только один вызов блока. Я могу отправить запрос ajax с использованием типа контента и с учетными данными. Есть 2 вещи.1) когда выполняется ajax-вызов, он не передает учетные данные. 2) когда я перезаряжаю, я вышел из системы. означает, что сеанс не сохраняется. –

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