2016-05-30 5 views
1

J'utilise le service d'authentification simple cookie 1.1.0 avec l'authentification par cookie et j'ai créé un authentificateur personnalisé avec des fonctions (restaurer, authentifier et invalider) et un initialisateur de l'authentificateur personnalisé .

Je lie sur l'événement ajaxError afin que nous puissions détecter les erreurs. Par exemple, accéder à un itinéraire avec une réponse du serveur 401 Non autorisé. Je voudrais invalider la session et rediriger l'utilisateur vers la page de connexion.Emberjs: Comment invalider une session dans un initialiseur d'authentification personnalisé

Pour l'instant, je ne suis pas en mesure d'obtenir la session par défaut ember-simple-auth dans l'initialiseur pour invalider la session. Je n'ai créé aucune session personnalisée pour mon application.

Quelle est la meilleure façon de faire cela?

Si ce n'est pas possible, est-il préférable de déclencher un événement sur l'initialiseur et d'attraper cet événement dans une route? Comment pouvons-nous faire cela?

Mon initialiseur personnalisé ressemble à:

import BasicAuthenticator from '../authenticators/basic'; 

export default { 
    before: 'ember-simple-auth', 
    name: 'basic-authenticator', 
    initialize(application) { 
    application.register('authenticator:basic', BasicAuthenticator); 
    Ember.$(document).ajaxError((event, jqxhr, settings, reason) => { 
     if (jqxhr.status === 401) { 

     } 
    }); 
    } 
}; 

My Custom Authenticator:

import Ember from 'ember'; 
import Base from 'ember-simple-auth/authenticators/base'; 

export default Base.extend({ 
    restore() { 
    return new Ember.RSVP.Promise(function(resolve, reject) { 
     let sessionCookie = window.Cookies.get('beaker.session.id'); 
     if(!window.isUndefined(sessionCookie)) { 
     resolve(true); 
     }else{ 
     reject(); 
     } 
    }); 
    }, 
    authenticate(data) { 
    return new Ember.RSVP.Promise(function (resolve, reject) { 
     Ember.$.ajax({ 
     type: 'post', 
     url: '/core/authentication/basic/login', 
     data: data 
    }).then((response) => { 
     resolve({ 
      responseText: response 
     }); 
     }, (error) => { 
     reject(error); 
     }); 
    }); 
    }, 
    invalidate() { 
    return new Ember.RSVP.Promise(function (resolve, reject) { 
     Ember.$.ajax({ 
     type: 'post', 
     url: '/core/authentication/basic/logout' 
     }).then(() => { 
     resolve(true); 
     },() => { 
     reject(); 
     }); 
    }); 
    } 
}); 

Répondre

1

J'ai trouvé la solution sur la façon dont je peux obtenir la séance à l'intérieur du initialiseur.

Voici la solution que je trouve:

import BasicAuthenticator from '../authenticators/basic'; 

export default { 
    before: 'ember-simple-auth', 
    name: 'basic-authenticator', 
    initialize(application) { 
    application.register('authenticator:basic', BasicAuthenticator); 
    Ember.$(document).ajaxError((event, jqxhr, settings, reason) => { 
     let service = application.__container__.lookup('service:session'); 
     let session = service.get('session'); 
     if (jqxhr.status === 401) { 
     session.invalidate(); 
     } 
    }); 
    } 
};