2

私はこれについて何時間も頭を悩ませてきましたが、まだ原因や解決策を見つけていません.

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ます。

4

3 に答える 3

1

同じ問題があり、ngCookies で対処できませんでした。代わりにローカル ストレージを使用することにしました。

このモジュールを使用します: https://github.com/grevory/angular-local-storage

また、あなたが示したコードに基づいて、ローカル ストレージはアプリにより適しています。参照:ローカル ストレージと Cookie

于 2015-04-25T17:36:34.693 に答える
0

インターフェースが変わったからです。$cookies で .get() と .set() を使用する必要があります。

    $cookies.set('USER_SESSION', 'your value here');

    auth.getToken = function() {
        return $cookies.get('USER_SESSION');
    }
于 2015-06-10T09:25:18.987 に答える