2016-04-04 1 views
1

ノード/エクスプレスバックエンドを持つ角型アプリケーションがあります。 IveはhttpProviderを使用して認証インターセプタを実装しようとしました。ローカルストレージにトークンが格納されている場合、アプリケーションは正常に動作し、バックエンドから制限付きデータを取得できますが、ログアウトしてメインビューにリダイレクトしようとすると、TypeError :未定義のプロパティ 'ヘッダ'を読み取ることができません。私が設定のコード行をコメントアウトすると、Iveはインターセプタを登録しました。エラーはなくなりました。私が診断できなかった何らかの理由で、ローカルストレージにトークンがない限り、アプリケーションがクラッシュします。

enter image description here

認証インターセプター:Configオブジェクトに登録さ

angular.module('barmehealth') 
    .factory('authInterceptor', function(authToken) { 

    return { 
     request: function(config) { 
     var token = authToken.getToken(); 

     if (token) { 
      config.headers.Authorization = 'Bearer ' + token; 

      return config; 
     } 
     }, 
     response: function(response) { 
     return response; 
     } 
    }; 
    }); 

$httpProvider.interceptors.push('authInterceptor'); 

Iは次のようにコードを変更することによって問題を解決しようと:

.factory('authInterceptor', function(authToken) { 

    return { 
    request: function(config) { 
     var currentToken = authToken.getToken(); 
     var token = currentToken ? currentToken : null; 

     if (token) { 
     config.headers.Authorization = 'Bearer ' + token; 

     return config; 
     } 
    }, 
    response: function(response) { 
     return response; 
    } 
    }; 
}); 

答えて

1

authインターセプタは条件付きでのみconfigを返します。これは論理的なエラーです。このようにそれを修正:

request: function(config) { 
    var token = authToken.getToken(); 

    if (token) { 
    config.headers.Authorization = 'Bearer ' + token; 
    } 

    return config; 
} 

それはifブロックの内側にあなただけreturn文を入れないようにすることが重要です。それ以外の場合は、トークンがない場合、設定は返されず、何かが髪の毛になるでしょう。トークンとconfig何がない場合は返却されないため

エラーがスローされ、角度serverRequest方法はconfig.headersにアクセスしようとすると、あなたはそれを返していなかったのでconfigが未定義であることを発見します。

+1

オハイオ州の男、骨頭ミス。ありがとう、明らかに期待どおりに動作します。 – Aaron

関連する問題