ember-simple-auth с разработанным сеансом, потерянным при обновлении

Я использовал simplabs ember-simple-auth в ember и настроил рельсы с помощью devise. при вызове authenticate() он отправляет электронную почту и пароль на rails. который возвращает токен. Я могу видеть токен в localalstorage следующим образом, но как только я нажму обновить, данные будут потеряны, и я вернусь на страницу входа.

{"secure":{
    "authenticator":"authenticator:devise",
    "id":1,"email":"abc@abc.com",
    "created_at":"2015-12-21T06:25:31.000Z",
    "updated_at":"2015-12-22T10:11:56.728Z",
    "authentication_token":"UoUTuVmUfwsVUnHVkE4U",
    }
}

в моей функции authenticate() я настроил устройство как аутентификатор с учетными данными.

export default Ember.Controller.extend({
  _email: Ember.inject.controller('email'),
  session: Ember.inject.service('session'),
  actions: {
    authenticate(){
      let identification = this.get('_email.email');
      let password = this.get('password');

      console.log(identification, password);
      this.get('session').authenticate("authenticator:devise",identification,password).catch((reason)=>{
        this.set('errorMessage',reason.error|| reason);
      });
    }
  }
});

внутри моей папки аутентификаторов я определил devise.js, который содержит

import DeviseAuthenticator from 'ember-simple-auth/authenticators/devise';
export default DeviseAuthenticator.extend();

внутри моей папки Authorizers я определил devise.js, который содержит

import DeviseAuthorizer from 'ember-simple-auth/authorizers/devise';
export default DeviseAuthorizer.extend();

мой config / environment.js содержит

ENV['simple-auth']={
    authorizer: 'simple-auth-authorizer:devise'
  };
  ENV['simple-auth-devise']={
    identificationAttributeName: 'email',
    resourceName:'user',
    tokenAttributeName: 'authentication_token'
  };

в соответствии с Ember Simple Auth: сеанс потерян при обновлении с указанием identifierAttributeName: "электронная почта" должна была решить проблему, но она все еще сохраняется.Рельсы боковые

application_controller.rb

class ApplicationController < ActionController::Base
  respond_to :json
  protect_from_forgery with: :null_session
  before_filter :authenticate_user_from_token!

  private
  def authenticate_user_from_token!
    authenticate_with_http_token do |token, options|
      user_email = options[:email].presence
      user = user_email && User.find_by_email(user_email)
      if user && Devise.secure_compare(user.authentication_token, token)
        sign_in user, store: false
      end
    end
  end
end

и session_controller.rb:

class SessionsController < Devise::SessionsController
  def create
    respond_to do |format|
      format.html { super }
      format.json do
        self.resource = warden.authenticate!(auth_options)
        sign_in(resource_name, resource)
        data = {
          token: self.resource.authentication_token,
          email: self.resource.email
        }
        render json: data, status: 201
      end
    end
  end
end

маршруты настроены на использование контроллера сеанса. Я только начал emberjs, и я застрял в этом на несколько дней. Я не знаю, где что-то пропустил.

1 ответ

Вы не можете настроить устройство проверки подлинности в config/environment.js но вместо этого настройте свойства фактического класса аутентификатора, как если бы вы устанавливали свойства, например, для адаптера Ember Data:

import DeviseAuthenticator from 'ember-simple-auth/authenticators/devise';
export default DeviseAuthenticator.extend({
  identificationAttributeName: 'email',
  resourceName:'user',
  tokenAttributeName: 'authentication_token'
});

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

Другие вопросы по тегам