2016-05-30 45 views
1

我使用的餘燼,簡單身份驗證1.1.0與Cookie身份驗證無效會話和我創建了功能(恢復,驗證和無效),並自定義驗證器的初始化一個自定義的認證。

我綁定在ajaxError事件,所以我們可以捕捉任何錯誤。例如訪問服務器響應401未授權的路由。我想使會話無效並將用戶重定向回登錄頁面。Emberjs:如何在自定義驗證初始化

目前我不能得到餘燼,簡單身份驗證默認情況下會在初始化,所以我可以作廢了會議。我沒有爲我的應用程序創建任何自定義會話。

這樣做的最好方法是什麼?

如果是不可能的,是能夠更好地在初始化觸發事件,趕上在路由事件?我們如何做到這一點?

我的自定義初始化的樣子:

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

     } 
    }); 
    } 
}; 

我的自定義驗證器:

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