0

コントローラー内のすべての http 呼び出しをサービスに移動し、$q約束するために使用しています...ページを更新してからコンテンツが消えるまで、すべてが機能しているようです。

設定:私のログイン サービスには、 を実行する関数があり、$http.postと が必要です。次に、応答データが promise に入れられます。usernamepassword

問題:サービスは動作しますが、ページが更新されたときに http 呼び出しを再送信しようとしています。ログインの詳細がないため、呼び出しは失敗します。

質問:ページが更新されたとき (およびユーザーがまだサインインしている場合) に元のデータを保持/保存するにはどうすればよいですか?

サービス:

var app = angular.module('myApp', ['ngRoute']);
app.factory('loginService', function($http, $q) {
    var deferResults = $q.defer();
     return {
    appContent: function(login_username, login_password) {
        $http.post('/login',{username: login_username, password: login_password}).success(function(data) {
          deferResults.resolve(myData);
      });
      return deferResults.promise;
    }
});

コントローラー:

    function loginPageCtrl($scope, loginService) {
       $scope.login = function (login_username, login_password, login_rememberMe) {
          loginService.appContent(login_username, login_username).then(function (data) {
             $scope.pageOneContent = data;
          });
       };
    };

    function pageTwoCtrl($scope, loginService) {
      // Use the same data when page is refreshed
      // without having to pass-in login details

      loginService.appContent().then(function (data) {
         $scope.pageTwoContent = data;
      });
   };
4

1 に答える 1

2

もちろん、ページが更新されると、アプリはすべての状態を失います。そのユーザー名とパスワードを Cookie のようにどこかに保持し、それを取得してから 2 番目の$http呼び出しを行う必要があります。トークンを Cookie に保持し、それを認証に使用するだけで十分です。angular を使用$cookieStoreして、ログインの詳細を保持します。

var userData={username:login_username,password:login_password};
$cookieStore.put('user_data', userData);

コントローラーがロードされたら、Cookie が存在するかどうかを確認します。

var userData = $cookieStore.get('user_data');
return userData

この回答のソースを確認して、これが実際に行われていることを確認してください。

要約すると、コントローラーが読み込まれるたびに Cookie をチェックし、未定義の場合はユーザーをログイン ページにリダイレクトし、そうでない場合はトークン/ユーザー名/パスワードを抽出して$http呼び出しを行います。

于 2014-03-17T10:04:49.970 に答える