0

Я использовал simpleabs ember-simple-auth в ember и установил рельсы с помощью devise. при вызове authenticate() он отправляет электронную почту и пароль на рельсы. который возвращает токен. Я могу видеть токен в localstorage следующим образом, но как только я ударил , обновите, данные потеряны, возвращая меня на страницу входа.ember-simple-auth with devise session lost on refresh

{"secure":{ 
    "authenticator":"authenticator:devise", 
    "id":1,"email":"[email protected]", 
    "created_at":"2015-12-21T06:25:31.000Z", 
    "updated_at":"2015-12-22T10:11:56.728Z", 
    "authentication_token":"UoUTuVmUfwsVUnHVkE4U", 
    } 
} 

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

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(); 

моего конфиг/окружающую среду. js содержит

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

в соответствии с Ember Simple Auth: Session lost on refresh с указанием идентификатораAttributeName: «электронная почта» должна была решить проблему, но она по-прежнему сохраняется. Рельсы боковые

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, и я застрял на этом в течение нескольких дней. Я не знаю, где я пропустил что-то.

+0

Вы используете локальный магазин? И если да, то что, по-вашему, там хранится? – usernames

+0

Содержимое локального хранилища находится на вершине – Ccr

ответ

0

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

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

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