2016-07-04 9 views
1

私は承認のためJWTを使用しています。 AngularJS 1.xでは私がログインするには、次の関数を使用:

$http.defaultsオブジェクトを修正さ
function login(username, password) { 
     var deferred = $q.defer(); 

     $http.post("/api/login", { 
      "username": username, 
      "password": password 
     }).then(function(response) { 
      if (response.data && response.data.token) { 
       var tokenBegin = response.data.token.substring(0,6); 
       var bearer = (tokenBegin === 'Bearer') ? '' : 'Bearer '; 
       $http.defaults.headers.common.Authorization = bearer + response.data.token; 
       deferred.resolve({ status: true, message: 'Login complete' }); 
      } else { 
       deferred.reject(response); 
      } 
     }, function(reason) { 
      deferred.reject(reason) 
     }); 

     return deferred.promise; 
    } 

。私は、Angular2とTypeScriptで損失が少しあります.Httpクラスはdefaultsオブジェクトを持っていないようです。どうすればいい?

答えて

3

それを行うには、いくつかの方法があります。

  • あなたがあなた自身のBaseRequestOptionsクラスを実装することができます

    import {BaseRequestOptions, RequestOptions, RequestOptionsArgs} from '@angular/http'; 
    
    export class AppRequestOptions extends BaseRequestOptions { 
        constructor() { 
        } 
    
        merge(options?:RequestOptionsArgs):RequestOptions { 
        options.url = 'https://www.test.org' + options.url; 
        return super.merge(options); 
        } 
    } 
    

    を、私はそれをこのように登録します。

    bootstrap(App, [ 
        HTTP_PROVIDERS, 
        provide(RequestOptions, {useClass: AppRequestOptions}) 
    ]); 
    
  • を拡張Http(またはXHRBackend)クラス自体:

    @Injectable() 
    export class CustomHttp extends Http { 
        constructor(backend: ConnectionBackend, defaultOptions: RequestOptions) { 
        super(backend, defaultOptions); 
        } 
    
        request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> { 
        console.log('request...'); 
        return super.request(url, options).catch(res => { 
         // do something 
        });   
        } 
    
        get(url: string, options?: RequestOptionsArgs): Observable<Response> { 
        console.log('get...'); 
        return super.get(url, options).catch(res => { 
         // do something 
        }); 
        } 
    } 
    

    と以下のように登録:

    bootstrap(AppComponent, [HTTP_PROVIDERS, 
        new Provider(Http, { 
        useFactory: (backend: XHRBackend, defaultOptions: RequestOptions) => new CustomHttp(backend, defaultOptions), 
        deps: [XHRBackend, RequestOptions] 
        }) 
    ]); 
    

これらの質問を参照してください。

+0

私は次のように推測します: 'merge(options?:RequestOptionsArgs):RequestOptions { options.headers.Authorization = 'Bearer:sometoken'; 返されるsuper.merge(options); } ' – stwissel