6

Restangular に出くわしたのは、休息サービスを呼び出すためです。それはうまく機能し、約束を返します。コールブロックを使用できるようにする必要があります。この理由は、技術的にはログインしていない新しいページのリロードにありますが、Cookie にトークンが保存されている可能性があります。このトークンを残りのサービスに対して検証したいと思います。問題は、ブロックする必要があることです。

タイムアウトが発生した場合、またはそれが有効でない場合、ユーザーを認証されていないものとして扱うことができます。

これがブロックしたい理由は、有効なトークンではない新しい URL に $location.path を使用してそれらをリダイレクトしたいからです。

これは特定のルートでは発生しないため、ブロックしている解決を使用できません。技術的にはすべてのルートで発生します- $on.$routeChangeStart を使用し、内部変数が LoggedIn を取得したかどうかを確認します。ログインしていない場合は、保存されているトークンを確認します。

これはページの更新ごとに発生しますが、アプリケーション内を移動している間は発生しません。

私が得ようとしている影響は、Gmail がどのように機能するかです。

誰かがこれについて持っている洞察を楽しみにしています

ありがとう

4

3 に答える 3

8

基本的に、ルート変更が発生する前に何らかの非同期アクションが発生することを確認する必要があります。この場合、アクションはユーザーを認証しています。

できることは、次のように、ルート上のオブジェクトに$routeChangeStartプロパティを追加するために発行されるイベントを使用することです。resolve

function authenticate() {
    if ( user.isAuthenticated ) {
        return;
    }
    // Just fake it, but in a real app this might be an ajax call or something
    return $timeout(function() {
        user.isAuthenticated = true;
    }, 3000);
}

$rootScope.$on( "$routeChangeStart", function( e, next ) {
    console.log( "$routeChangeStart" );
    next.resolve = angular.extend( next.resolve || {}, {
        __authenticating__: authenticate
    });
});

angular は続行する前にオブジェクト内の約束が満たされるのを待つためresolve、例のように疑似依存関係を使用できます。そのようなものを使用すると、ルートが正常に実行される前に、ユーザーが認証されていることを保証できるはずです。

例: http://jsfiddle.net/hLddM/

于 2013-08-15T02:24:50.653 に答える
0

これを行う最善の方法は、ユーザーを $location.path でプッシュすることだと思います。.then() を使用して、ユーザーを読み込みページに残すことで効果的に待機させることができます。

var currentPath = $location.path();

$location.path(loadingScreen);

//Assuming you have some sort of login function for ease.
Restangular.login(token).then(
    function(result) {
        $location.path(currentPath)
    },
    function(error) {
        $location.path(logInScreen)
    }
);
于 2013-08-07T14:40:18.480 に答える
0

ui-router を使用している場合は、同じ URL で別の状態に移動できます。そこで、その Restangular.login を then で使用し、成功した場合は「ログイン済み」状態に戻ります。それ以外の場合は、ユーザーが自分のユーザー名とパスワードを入力する必要がある「ログイン」状態に移動します。

ui-router を使用していない場合は、そのようなものを some で実装できますng-switch

したがって、画面に到着したらそれをRestangular.login行い、デフォルトでは、ブール値をtrueに設定してロードページを表示します。次に、成功しなかった場合は、彼をログインに送ります。それ以外の場合は、読み込みを false に設定してページを表示します。

とにかく、ui-router の使用を強くお勧めします。

これがうまくいくことを願っています!

于 2013-08-11T03:58:41.877 に答える