0

私のアプリケーションにログインするとき(認証トークンを含む)にユーザー情報を保持するために、currentUserという角型ファクトリがあります。このファクトリは多くのコントローラに注入されており、これらのケースではcurrentUser.getProfile()を使用しても問題はありません。

私はまた、それぞれがAPI呼び出しを行うための$リソースオブジェクトを返すさまざまなファクトリを持っています。これらの工場では、currentUserを注入して、認証ヘッダーに追加する認証トークンを取得できるようにします。ここではこれらの工場の一つの簡単な例である:私は1つの私のコントローラに値をログインしたときにそれがあるにもかかわらず、

angular 
    .module("common.services") 
    .factory("userAccount", 
      ["$resource", 
      "appSettings", 
      "currentUser", 
      userAccount]) 

function userAccount($resource, appSettings, currentUser) { 
    return { 
     logout: $resource(appSettings.serverPath + "/api/Account/Logout", null, 
      { 
       'logoutUser': { 
        method: 'POST', 
        headers: { 
         'Authorization': 'Bearer ' + currentUser.getProfile().token 
        } 
       } 
      }) 
    } 
} 

はしかし、currentUser.getProfile()トークンは常に空で、私はunathorisedエラーを取得します空ではない。これを引き起こす原因は何ですか?

編集:問題は、ちょうど私がcurrentUser.getProfileを交換するとき()localStorage.getItem(「トークン」)をトークンとして、CurrentUserに工場でもないようだ私は同じ問題を抱えているように見えます。コントローラーはローカルに格納されたトークンを正しくログに記録しますが、API要求のヘッダーには追加されません。

答えて

3

を返す関数には、logoutが必要です。

あなたはそれが今currentUser.getProfile()への呼び出しは、すぐにサービスがどの初期化されるよう作られている必要があり方法はできませんトークンを取得するために

function userAccount($resource, appSettings, currentUser) { 
    return { 
    logout: function() { 
     return $resource(appSettings.serverPath + "/api/Account/Logout", null, { 
     'logoutUser': { 
      method: 'POST', 
      headers: { 
      'Authorization': 'Bearer ' + currentUser.getProfile().token 
      } 
     } 
     }) 
    } 
    } 
} 

今の呼び出しでユーザーにもログインする前に、おそらくです電話するまでuserAccount.logout()

+0

ありがとうございました、これは今動作するようです! – shadowsora

+0

また、httpInterceptorsのしくみ – charlietfl

0

正確には修正されていませんが、いくつかの回避策があるようです。ここではそれについて

$http.defaults.headers.common['Authorization'] = 'Bearer ' + data.access_token; 

ブログのポスト:私が使用することを選んだ 1は、一般的なこのようなHTTPヘッダーとして認証トークンを追加することでした誰もが知っていたら http://blog.brunoscopelliti.com/authentication-to-a-restful-web-service-in-an-angularjs-web-app/

私はまだ興味があるものをI以前は間違っていた?

関連する問題