2014-11-03 3 views
0

ember-cli 0.1.2 및 ember-cli-simple-auth 0.7.0을 사용하여 클라이언트와 서버 모두에서 세션을 무효화해야합니다.사용자 정의 인증자를 사용한 세션 무효화

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

var CustomAuthenticator = Base.extend({ 
    tokenEndpoint: 'http://127.0.0.1:3000/api/v1/auth/login', 

    restore: function(data) { 

    }, 

    authenticate: function(credentials) { 
    var _this = this; 
    return new Ember.RSVP.Promise(function(resolve, reject) { 
     Ember.$.ajax({ 
     url:   _this.tokenEndpoint, 
     type:  'POST', 
     data:  JSON.stringify({ email: credentials.identification, password: credentials.password }), 
     contentType: 'application/json' 
     }).then(function(response) { 
     Ember.run(function() { 
      resolve({ token: response.token }); 
     }); 
     }, function(xhr, status, error) { 
     var response = JSON.parse(xhr.responseText); 
     Ember.run(function() { 
      reject(response.error); 
     }); 
     }); 
    }); 
    }, 

    invalidate: function() { 
    var _this = this; 
    return new Ember.RSVP.Promise(function(resolve, reject) { 
     Ember.$.ajax({ 
     url: _this.tokenEndpoint, 
     type: 'DELETE' 
     }).then(function(response) { 
     resolve(); 
     }, function(xhr, status, error) { 
     var response = JSON.parse(xhr.responseText); 
     Ember.run(function() { 
      reject(response.error); 
     }); 
     }); 
    }); 
    } 

    // invalidate: function() { 
    // var _this = this; 
    // return new Ember.RSVP.Promise(function(resolve) { 
    //  Ember.$.ajax({ url: _this.tokenEndpoint, type: 'DELETE' }).always(function() { 
    //  resolve(); 
    //  }); 
    // }); 
    // } 
}); 

export default { 
    name : 'authentication', 
    before : 'simple-auth', 
    initialize : function(container) { 
    container.register('authenticator:custom', CustomAuthenticator); 
    } 
}; 

내 로그 아웃 API 엔드 포인트는 (헤더)에 토큰이 필요합니다 here를 설명하고있는 바와 같이 나는 authenticate 방법과 비슷한 서버에 아약스 요청을하고 세션을 비우기 전에 성공을 보장 할 필요가있다. 그것을 어떻게 전달합니까? 나는 this을 읽을 수는 있지만 내 권한 부여는 그것을 무시 보인다 나는 401 가지고 :

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

var CustomAuthorizer = Base.extend({ 
    authorize: function(jqXHR, requestOptions){ 
    Ember.debug("AUTHORIZING!"); 
    } 
}); 

export default { 
    name : 'authorization', 
    before : 'simple-auth', 
    initialize : function(container) { 
    container.register('authorizer:custom', CustomAuthorizer); 
    } 
}; 

environment.js : enter image description here을 : 결국, 내가 로그 아웃 할 때,

/* jshint node: true */ 

module.exports = function(environment) { 
    var ENV = { 
    modulePrefix: 'wishhhh', 
    environment: environment, 
    baseURL: '/', 
    locationType: 'auto', 
    EmberENV: { 
     FEATURES: { 
     // Here you can enable experimental features on an ember canary build 
     // e.g. 'with-controller': true 
     } 
    }, 

    APP: { 
     // Here you can pass flags/options to your application instance 
     // when it is created 
    } 
    }; 

    // TODO: disabled because of https://github.com/stefanpenner/ember-cli/issues/2174 
    ENV.contentSecurityPolicyHeader = 'Disabled-Content-Security-Policy' 

    ENV['simple-auth'] = { 
    authorizer: 'authorizer:custom', 
    // crossOriginWhitelist: ['http://localhost:3000'] 
    crossOriginWhitelist: ['*'] 
    } 

    if (environment === 'development') { 
    // ENV.APP.LOG_RESOLVER = true; 
    ENV.APP.LOG_ACTIVE_GENERATION = true; 
    // ENV.APP.LOG_TRANSITIONS = true; 
    // ENV.APP.LOG_TRANSITIONS_INTERNAL = true; 
    ENV.APP.LOG_VIEW_LOOKUPS = true; 
    } 

    if (environment === 'test') { 
    // Testem prefers this... 
    ENV.baseURL = '/'; 
    ENV.locationType = 'auto'; 

    // keep test console output quieter 
    ENV.APP.LOG_ACTIVE_GENERATION = false; 
    ENV.APP.LOG_VIEW_LOOKUPS = false; 

    ENV.APP.rootElement = '#ember-testing'; 
    } 

    if (environment === 'production') { 

    } 

    return ENV; 
}; 

다음은 엠버 관리자 출력됩니다 다음

+0

BTW : 인증 자의'restore' 메소드 – marcoow

답변

0

marcoow에게 감사 드리며, 로그 아웃뿐만 아니라 모든 요청에 ​​실제로 문제가 있음을 알게되었습니다. 내 권한 부여자는 결코 전화를받지 못했습니다. 문제는 crossOriginWhitelist의 환경 설정이었는데, 내 개발자 API에서 작동하려면 ['http://127.0.0.1:3000']으로 설정해야했습니다. ['http://localhost:3000']도 아니고 [*]도 작동하지 않습니다.

0

Ember Simple Auth를 사용자 지정 인증자를 사용하도록 실제로 구성 했습니까? 이 경우 세션 무효화 요청을 자동으로 승인해야합니다.

또는 세션의 내용을 전달하는 인증 기의 invalidate 메소드에 토큰을 추가 할 수 있습니다.

+0

안녕 마르코를 설치해야합니다. 내 질문을'environment.js'로 편집했습니다. 어쩌면이 문제는 [this] (http://stackoverflow.com/questions/24716668/simple-auth-addon-seems-to-not-be-reading-env-config)와 관련이 있습니다. 하지만 내가 정확히 그 스 니펫을 어디에 넣어야할지 모르기 때문에 나는 시도 할 수 없었다. – masciugo

+0

더 이상'window.ENV'가 필요 없다. 'Ember.debug ("AUTHORIZING!");이 실제로 실행되었습니다 (당연히 그 메소드에 헤더를 실제로 추가해야합니다). – marcoow

+0

아니요 실행되지 않았습니다. Ember Inspector에서 custom이라는 실제 권한 부여 컨테이너가 존재하고 그 속성 중 'authenticator : authenticator : custom'이 잘못되었을 가능성이 있음을 알았습니다. 첨부 된 스크린 샷을 확인하십시오 ... – masciugo