1

私は本当にSimpleLogin認証をAngular jsの解決と統合したいと思っています。私は次のことをしようとしました:

app.config(function($routeProvider) {
$routeProvider.when("/login", {
    templateUrl: "templates/authentication.html",
    controller: "AuthenticationController",
    resolve: {
        authenticated_user: function($q, $timeout) {
            var deferred = $q.defer();
            var ref = new Firebase("https://theuy-angularfire.firebaseio.com/");

             var auth = new FirebaseSimpleLogin(ref, function(error, user) {
              if (error) {
                deferred.resolve(null);
              } else if (user) {
                console.log('User ID: ' + user.id + ', Provider: ' + user.provider);
                deferred.resolve(user);
              } else {
                deferred.resolve(null);
              }
            });

            return deferred.promise;
        }
    }
});

ログインに成功したときにコールバックを受け取りましたが、テンプレートがレンダリングされませんでした。Firebase SimpleLogin 認証を解決で使用する方法についてアドバイスをいただけますか?

4

1 に答える 1

1

問題が何であるかを知ることだと思います。

Angular の解決機能はクライアント側の操作であるため、実行するとより高速になりますが、SimpleLogin はサーバーに接続して応答を待つ必要があります。問題は、Angular が認証プロセスの結果の前にテンプレートを解決してレンダリングしようとしたことでした。

そこで、最初に認証プロセスを実行し、次に角度を手動でブートストラップし、最終的に解決機能を実行するソリューションを思いつきました。ソリューションは次のようになります。

var app = angular.module("myapp", ["firebase"]);
app.user = null;
app.ref = null;
app.auth = null;
// when the dom is ready, so we sure we can bootstrap angular manually
angular.element(document).ready(function () {
    app.ref = new Firebase("https://theuy-angularfire.firebaseio.com/");
    app.auth = new FirebaseSimpleLogin(app.ref, function (error, user) {
        app.user = user;
        angular.bootstrap(document, ['myapp']);
    });
});
// this object is needed when we want to authenticate somewhere in our application with the use of resolve
var authentication = {
    app: function ($q, $location) {
        var deferred = $q.defer();

        // go to the dashboard when the user is logged in
        if (app.user != null) {
            $location.path("/dashboard");
            deferred.resolve(app.user);
        } else {
            // go to the login form when the user is logged logged out, or never had logged in
            $location.path("/login");
            deferred.resolve(null);
        }
        return deferred.promise;
    }
}

app.config(function ($routeProvider) {
    $routeProvider.when("/login", {
        templateUrl: "templates/loginform.html",
        resolve: authentication,
        controller: "LoginController"
    });

    $routeProvider.when("/dashboard", {
        templateUrl: "templates/dashboard.html",
        resolve: authentication,
        controller: "DashboardController"
    });
});
于 2013-11-02T09:04:37.307 に答える