0

J'ai utilisé simplabs ember-simple-auth en braise et ai configuré les rails en utilisant concevoir. quand authenticate() est appelé, il envoie l'email et le mot de passe aux rails. qui renvoie le jeton. Je peux voir le jeton dans localstorage comme suit mais dès que je clique sur actualiser les données sont perdues me ramenant à la page de connexion.ember-simple-auth avec une session machine perdue lors de la régénération

{"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", 
    } 
} 

dans ma fonction authenticate() J'ai configuré concevoir en tant qu'authentificateur avec les informations d'identification.

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

dans mon dossier authentificateurs j'ai défini devise.js qui contient

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

dans mon dossier approbateurs j'ai défini devise.js qui contient

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

ma config/environnement. js contient

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

selon Ember Simple Auth: Session lost on refresh en précisant identificationAttributeName: 'email' aurait dû résoudre le problème mais il persiste. rails latéraux

de 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 

et 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 

routes sont configurés pour utiliser le contrôleur de session. Je viens de commencer emberjs et je suis coincé là-dessus depuis quelques jours maintenant. Je ne sais pas où j'ai manqué quelque chose.

+0

Utilisez-vous le magasin de stockage local? Et si oui, que voyez-vous être stocké là? – usernames

+0

le contenu du stockage local est sur le dessus – Ccr

Répondre

0

Vous ne pouvez pas configurer l'authentificateur de devise dans config/environment.js mais configurer les propriétés de la classe d'authentificateurs réelle comme vous le feriez pour les propriétés, par exemple. sur un adaptateur de données Ember:

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

De cette façon, il sera en fait utiliser les bonnes propriétés rendant la détermination de la méthode restore lors de l'actualisation.