9

ユーザーの資格情報が受け入れられたら、Bearer トークン [1] をフェッチし、デフォルトのヘッダーを更新します。

     $http.defaults.headers.common.Authorization = "Bearer #{data.access_token}"

これは $scope.signIn() メソッドの最後で行われます。トークンはセッション全体で持続しますか? それとも他の方法を使用する必要がありますか?

[1] https://github.com/doorkeeper-gem/doorkeeper/wiki/Client-Credentials-flow

app.run run = ($http, session) ->
    token = session.get('token')
    $http.defaults.headers.common['Authorization'] = token
4

1 に答える 1

13

この問題を解決する優れた方法は、すべての $http リクエストにヘッダーを追加する責任を持つ authInterceptor ファクトリを作成することです。

angular.module("your-app").factory('authInterceptor', [
  "$q", "$window", "$location", "session", function($q, $window, $location, session) {
    return {
      request: function(config) {
        config.headers = config.headers || {};
        config.headers.Authorization = 'Bearer ' + session.get('token'); // add your token from your service or whatever
        return config;
      },
      response: function(response) {
        return response || $q.when(response);
      },
      responseError: function(rejection) {
        // your error handler
      }
    };
  }
]);

次に、app.run で:

// send auth token with requests
$httpProvider.interceptors.push('authInterceptor');

これで、$http (または $resource については $resource) で作成されたすべてのリクエストが認証ヘッダーと共に送信されます。

$http.defaults を変更する代わりにこのようにすることは、リクエストとレスポンスをより細かく制御できることを意味します。また、カスタム エラー ハンドラを使用したり、認証トークンを送信するかどうかを決定するロジックを使用したりすることもできます。

于 2015-05-11T21:42:32.903 に答える