2016-05-10 10 views
0

パスワード回復のためのシンプルなシステムがあります。anglejsにテンプレートを表示する前のハンドル状態のルーティング

ユーザーがアカウントの復旧をリクエストすると、新しいパスワードを設定できるページへのリンクが含まれる電子メールが送信されます。このリンクには、パラメータに検証キーが含まれています。

このリンクは私のアプリケーションでcore.recoverと呼ばれる状態を呼び出します。この状態では、新しいパスワードを設定できるテンプレートがユーザーに表示されます。ユーザーが誤ってこのURLにアクセスすることがあります。リンクに有効な確認キーが含まれているかどうかをチェックするサービスを作成しました。もしそうでなければ、彼は他の州にリダイレクトされます。

は、だから私は、次のように私の状態を作成しました:私は約束を持っているユーザーは自分の電子メール内のリンクを開いたとき

.state('core.recover', { 
     url: '/recover', 
     controller: 'RecoverPasswordCtrl', 
     resolve: function(recoverAccountService, $location, $state, $q) { 
      var deferred = $q.defer(); 
      deferred.resolve(); 
      recoverAccountService.get({email:$location.search().email, verificationKey:$location.search().verificationKey}) 
      .$promise.then(function (result) {}).catch(function (err) { 
      $state.go("candidature.pre"); 
      }); 
      return deferred.promise; 
     }, 
     templateUrl: 'views/tmpl/recoverAccount/recover-password.html' 
     }) 

だから、このコードが何をしているか、彼は core.recover状態を呼び出します、この状態では指定された電子メールとアクティベーションキーが有効かどうかを確認するサービスから返されます。そうでない場合、ユーザは recover-passwordテンプレートを表示する前に candidature.pre状態にリダイレクトされます。

しかし、約束が何らかのエラーを返すときは、私はいつもrecover-passwordのテンプレートを短時間表示してから、他の状態にリダイレクトされます。

どうすれば解決できますか?

編集:

私の質問はこれと同じではありません:あなたは、私がそのポストに提供される同じコードを持って見ることができるように

Change state of angular app from resolve method of state provider

、そして私のコードは、問題のみを動作します私は他の状態にリダイレクトされる前に、その短い瞬間にテンプレートを表示したくないということです。それがエラーを返した場合、あなたのサービスが応答を返すと約束を拒否すべきである後

+0

を受け、その後の約束を解決する必要がありますか?私はそれが仕事をするだろうと思う。私は私のコメントbtwを削除します。 – Michelangelo

答えて

0

あなたの約束を解決しなければならない状態の

resolve: function($q, recoverAccountService) { 


    var deferred = $q.defer(); 

recoverAccountService.get({email:$location.search().email,verificationKey:$location.search().verificationKey}).$promise.then(function (result) { 
        deferred.resolve(); 
        }).catch(function (err) { 
        deferred.reject(); 
        $state.go("candidature.pre"); 
        }); 

    return deferred.promise; 
} 
+0

私はそれを試みましたが、エラーが表示されました: 'Error: 'invocables'はオブジェクトでなければなりません –

0

解決部分が常にオブジェクトを返す必要がありますので、あなたの決意の一部は、として更新します。

resolve: { 
    recoverAccounts: function ($q, recoverAccountService) { 

     var deferred = $q.defer(); 
     recoverAccountService.get({ 
     email: $location.search().email, 
     verificationKey: $location.search().verificationKey 
     }).$promise.then(function (result) { 
     deferred.resolve(); 
     }).catch(function (err) { 
     deferred.reject(); 
     $state.go("candidature.pre"); 
     }); 
     return deferred.promise; 
    } 

    } 

また、あなたは常にあなたがタイムアウトを使用して、第二の答えを読みましデータ

関連する問題