使用承诺创建用户和登录流

createUser and login flow with promises

本文关键字:登录 用户 创建 承诺      更新时间:2023-09-26

在这个git问题中,AngularFire禁用了与$createUser相关的自动登录功能。(文档已经过时了)

那么创建用户并登录的最佳实践/最干净的方法是什么呢?
 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使用明文密码。

我对承诺不熟悉。谢谢!

我不明白加藤的意思。但现在我明白了承诺,解决方案是相当直接的:

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

我想这个应该可以了。你必须使用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);
    },
    ...