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
метод разрешения при обновлении.