2017-09-01 15 views
1

私は関数からユーザー名とパスワードの値を渡しているので、ログイン後にトークンの値を取得できます。次のページで、私はそれらの値を渡すつもりはありません。なぜ私がヌルになっているのかが分かります。これは、私が約束でトークンリターンをラップしていないときです。私が下に見て約束しているトークン値をラップすると、私はこのエラーを受け取りますエラーTypeError:プロパティ '未定義の'を読み取ることができません、トークンは未定義ですこれは私が必要とするユーザーの資格情報でログインしていないためですトークンを生成するため、存在しないか、または定義されていません。私が上記のように2番目のページに電話をかけたときにnullを返さないと仮定すると、私は自分のストレージに関する約束を折り返しました。ありがとう!ローカルストレージの約束からの未定義の値。 Ionic 2+/Angular 4.3

Auth.ts

login(userName: string, password: string, route: string = null): any { 
    this.logout(false); 

    this.doLogin(userName, password) 
     .subscribe(response => { 
     let token:string = JSON.stringify(response.access_token); 
     this.storage.set('token', token); 

     }); 
    } 

getToken() :any{ 
    this.storage.get('token').then((val) => { 
     this.accessToken = val; 

     if(this.accessToken == null){ 
       return '0' 
     } 
      else{ 
       return "Bearer " + this.accessToken.replace(/["]+/g, '') 
      } 
    }) 
} 

component.ts

login(){ 
this.authService.login(this.account.username, this.account.password) 
} 

Interceptor.ts

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { 


     let access = this.auth.getToken() 

     const authReq = req.clone({ 
       setHeaders: { 
       Authorization: access 
       } 
     }); 

    return next.handle(authReq) 
    } 

ありがとう!

答えて

0

promiseメソッド内のreturn文は機能しません。 storage.get()は非同期関数であるため、値の戻り値はここでは機能しません。 getTokenメソッドにコールバック関数を渡し、then()関数の中でコールバック関数を呼び出すか、Interceptor.tsのgetメソッドのthen()関数内にインターセプトロジックを書き込む必要があります。

+0

問題は、Observable >ではなく、エラーを引き起こしているPromise >を返すことです – userlkjsflkdsvm

関連する問題