使用promises创建用户和登录流程

时间:2014-03-11 04:43:31

标签: javascript angularjs firebase promise angularfire

In this git issue AngularFire禁用了与$createUser相关联的自动登录功能。 (The docs已过时。)

那么创建用户然后将其登录的最佳实践/最简洁方法是什么?

 app.factory('Auth', function($firebaseSimpleLogin, FIREBASE_URL, $rootScope) { 
    var ref = new Firebase(FIREBASE_URL);
    var auth = $firebaseSimpleLogin(ref);

    var Auth = {
        register: function (user) {
            return auth.$createUser(user.email, user.password);
        },
        login: function (user) {
            return auth.$login('password', user);
        },
        ...

注意:$createUser返回md5哈希,但$login使用明文密码。

我是承诺的新手。谢谢!

2 个答案:

答案 0 :(得分:1)

我没有意识到加藤的意思。但是现在我理解了承诺,解决方案非常简单:

    register: function (user) {
        return auth.$createUser(user.email, user.password)
            .then(function() {
                return auth.$login('password', user);
            });
    },

答案 1 :(得分:0)

我认为应该这样做。你必须使用q或者注入angular。$ q。

app.factory('Auth', function($firebaseSimpleLogin, FIREBASE_URL, $rootScope) { 
var ref = new Firebase(FIREBASE_URL);
var auth = $firebaseSimpleLogin(ref);
var deferred = Q.defer(); // from Q lib
// var deferred = $q.defer(); //angularjs q

var Auth = {
    register: function (user) {

        auth.$createUser(user.email, user.password)
        .then(function(result) {
          deferred.notify('user created.'); // optional notify progress
          return auth.$login('password', user); // return a new promise for chaining.
        },
        function(reason) {
          // createUser failed
          deferred.reject(reason);
        })
        .then(function(result) {
          // resolve the login promise return from above
          deferred.resolve(result);
        },
        function(reason) {
          // login failed
          deferred.reject(reason);
        });

        return deferred;
    },
    login: function (user) {
        return auth.$login('password', user);
    },
    ...