2016-05-30 4 views
1

Ich benutze Ember-Simple-Auth 1.1.0 mit Cookie-Authentifizierung und ich erstellte einen benutzerdefinierten Authentifikator mit Funktionen (wiederherstellen, authentifizieren und invalidieren) und einen Initialisierer des benutzerdefinierten Authentifikators .

Ich binde auf AjaxError Ereignis, damit wir alle Fehler fangen können. Zum Beispiel Zugriff auf eine Route mit einer Serverantwort 401 Nicht autorisiert. Ich möchte die Sitzung ungültig machen und den Benutzer zurück zur Anmeldeseite umleiten.Emberjs: Wie Session im benutzerdefinierten Authentifizierungsinitialisierer ungültig machen

Im Moment kann ich die Ember-Simple-Auth-Standardsitzung im Initialisierer nicht abrufen, sodass ich die Sitzung ungültig machen kann. Ich habe keine benutzerdefinierte Sitzung für meine Anwendung erstellt.

Was ist der beste Weg, dies zu tun?

Wenn es nicht möglich ist, ist es besser, ein Ereignis beim Initialisierer auszulösen und dieses Ereignis in einer Route zu fangen? Wie können wir das machen?

Meine benutzerdefinierten initializer wie folgt aussieht:

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

Antwort

1

ich die Lösung auf gefunden, wie ich die Sitzung in dem initializer bekommen kann.

Unterhalb der Lösung, die ich gefunden:

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(); 
     } 
    }); 
    } 
}; 
Verwandte Themen