私はこれについて何時間も頭を悩ませてきましたが、まだ原因や解決策を見つけていません.
ngCookies
基本的に、バックエンドの認証 API エンドポイントと通信することによって(Angular.js 1.3.15 で) ユーザーをログインさせようとする Angular.js フロントエンドがあります。成功すると、私のコードはユーザーを別のページにリダイレクトするはずです。
したがって、ログイン コードは次のようになります。
auth.login($scope.user).success(function() {
$state.go('overview');
});
whereは、単純に POST リクエストをバックエンドに送信するメソッドをauth
持つサービスです。リダイレクトを行います。正しいユーザー資格情報を提供すれば、サーバーから HTTP200 が返されるため、このコードは問題ありません。ただし、ブラウザーは、ページを更新しない限りログインしていないと見なすため、概要ページにリダイレクトされません。login
$state.go('overview')
現在のユーザーがログインしているかどうかを確認するコードは、 という名前のヘルパー メソッドgetToken()
を使用します。ここで、ngCookies
という名前の Cookie を取得しますUSER_SESSION
。そして、この方法が問題だと思います。
メソッド自体は単純に
auth.getToken = function() {
return $cookies.USER_SESSION;
};
ただし、ブラウザに Cookie が存在するundefined
場合でも、常に返されます。USER_SESSION
私が行ったいくつかのテスト(リモートテストサーバー上で、Cookieへのアクセスlocalhost
は問題になりません):
auth.getToken = function() {
console.log($cookies);
console.log($cookies.USER_SESSION);
return $cookies.USER_SESSION;
}
の結果console.log
:
// Before login:
Object {...} // No USER_SESSION, this is good
undefined
// After hitting the login button, browser sends AJAX request,
// server returns HTTP200 response with Set-Cookie in the header:
Object {USER_SESSION: ""aa21fcd..."", ...} // UESR_SESSION exists, good
undefined // ???
// After refreshing the page:
Object {USER_SESSION: ""09b4tk..."", ...}
"09b4tk..."
ここで二重引用符が問題ですか?最初はそう思っていましたが、ページを更新した後$cookies
、同じもの (同じ二重引用符であるが異なるUSER_SESSION
値) を返し$cookies.USER_SESSION
、正しい値が返され、ユーザーは概要ページに表示されます。
これはSet-Cookie
、HTTP 応答ヘッダーを有効にするにはページを更新する必要があるということですか?
ありがとう!
PS同じ問題が発生しcookieStore
ます。