【问题标题】:Firebase / AngularFire create user informationFirebase / AngularFire 创建用户信息
【发布时间】:2014-02-19 11:38:50
【问题描述】:

我正在使用 AngularFire 创建一个新用户。但是当我注册用户时,我还会询问名字和姓氏,并在注册后添加该信息。

$firebaseSimpleLogin(fbRef).$createUser($scope.signupData.email, $scope.signupData.password).then(function (user) {
  // Add additional information for current user
  $firebase(fbRef.child('users').child(user.id).child("name")).$set({
    first: $scope.signupData.first_name,
    last: $scope.signupData.last_name
  }).then(function () {
    $rootScope.user = user;
  });
});

上面的代码有效,它创建了节点 fin Firebase (users/user.id/ ...)。

问题

当我使用新用户登录时,我会得到用户默认信息:id、电子邮件、uid 等,但没有名称。如何将这些数据自动关联到用户?

【问题讨论】:

    标签: firebase angularfire


    【解决方案1】:

    你不能。 Firebase 通过将登录详细信息存储在自己的数据存储中来隐藏登录管理的复杂性。此过程对您的应用程序的伪造一无所知,这意味着它不知道您是否或在何处存储任何其他用户信息。它返回它确实知道的方便的数据(id、uid、email、md5_hash、provider、firebaseAuthToken)。

    然后由您的应用获取 [u]id 并获取您需要的任何特定于应用的用户信息(例如名字、姓氏)。对于 Angular 应用程序,您需要一个 UserProfile 服务,该服务在您获得身份验证成功广播后检索您正在查找的数据。

    另外,在你的 sn-p 中,考虑改变

    .child(user.id) 
    

    .child(user.uid) 
    

    如果您以后支持 Facebook/Twitter/Persona 身份验证,这将派上用场。 uid 看起来像“simplelogin:1” - 它有助于避免提供商之间不太可能但可能的 id 冲突。

    【讨论】:

      【解决方案2】:

      我对此有同样的问题,并且觉得实际上没有人有明确的答案(2 年过去了)。但以下是此类服务的大致结构:

      app.factory('Auth', function(FURL, $firebaseAuth, $firebaseObject, $rootScope, $window){
      ​
        var ref = new Firebase(FURL);
        var auth = $firebaseAuth(ref);
      ​
        var Auth = {
          user: {},
      ​
          login: function(user){
            return auth.$authWithPassword({
              email: user.email,
              password: user.password
            });
          },
      ​
          signedIn: function(){
            return !!Auth.user.provider;
          },
      ​
          logout: function(){
            return auth.$unauth;
          }
        };
      ​
        // When user auths, store auth data in the user object
        auth.$onAuth(function(authData){
          if(authData){
            angular.copy(authData, Auth.user);
            // Set the profile
      
            Auth.user.profile = $firebaseObject(ref.child('profile').child(authData.uid));
            Auth.user.profile.$loaded().then(function(profile){
              $window.localStorage['gym-key'] = profile.gym.toString();
            });
          } else {
            if(Auth.user && Auth.user.profile){
              Auth.user.profile.$destroy();
            }
      ​
          }
        });
      ​
        return Auth;
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-18
        • 2015-01-29
        • 1970-01-01
        • 2017-08-07
        • 1970-01-01
        • 1970-01-01
        • 2021-09-14
        • 1970-01-01
        相关资源
        最近更新 更多