パスワード回復のためのシンプルなシステムがあります。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
、そして私のコードは、問題のみを動作します私は他の状態にリダイレクトされる前に、その短い瞬間にテンプレートを表示したくないということです。それがエラーを返した場合、あなたのサービスが応答を返すと約束を拒否すべきである後
を受け、その後の約束を解決する必要がありますか?私はそれが仕事をするだろうと思う。私は私のコメントbtwを削除します。 – Michelangelo