2016-05-30 4 views
1

Я использую ember-simple-auth 1.1.0 с проверкой файлов cookie, и я создал собственный аутентификатор с функциями (восстановление, аутентификация и аннулирование) и инициализатор пользовательского аутентификатора ,

Я привязываюсь к событию ajaxError, чтобы мы могли поймать любые ошибки. Например, для доступа к маршруту с ответом сервера 401 Not Authorized. Я хотел бы аннулировать сеанс и перенаправить пользователя на страницу входа.Emberjs: как аннулировать сеанс в пользовательском инициализаторе инициализации

На данный момент я не могу получить сеанс по умолчанию с ember-simple-auth в инициализаторе, чтобы я мог аннулировать сеанс. Я не создал пользовательский сеанс для своего приложения.

Каков наилучший способ для этого?

Если это невозможно, лучше запустить событие на инициализаторе и поймать это событие в маршруте? Как мы можем это сделать?

Мой заказ инициализатора выглядит следующим образом:

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) { 

     } 
    }); 
    } 
}; 

Мой заказ 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(); 
     }); 
    }); 
    } 
}); 

ответ

1

Я нашел решение о том, как я могу получить сеанс в инициализаторе.

Ниже решение, которое я нашел:

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(); 
     } 
    }); 
    } 
}; 
Смежные вопросы