当前位置: 首页 > 知识库问答 >
问题:

AngularFire:从SimpleLogin中的电子邮件中获取用户数据的ID

洪念
2023-03-14

我正在尝试通过AngularFire和A使用Firebase实现一些简单的使用注册ngular.js.我正在使用SimpleLogin工具来管理用户。我可以很好地创建用户。

  var firebaseRef = new Firebase(FIREBASE_URL);
  var simpleLogin = $firebaseSimpleLogin(firebaseRef);

  var firebaseUsersRef = new Firebase(FIREBASE_URL + 'users');
  var firebaseUsers = $firebase(firebaseUsersRef);

  var myObject = {

    register: function(user) {
      var myDate = new Date().getTime();

      return simpleLogin.$createUser(
        user.email, user.password)
        .then(function(regUser) {
            var userInfo = {
                date: myDate,
                md5: regUser.md5_hash,
                firstname: user.firstname,
                lastname: user.lastname,
                email: user.email
              }
            firebaseUsers.$push(userInfo).then(function(ref) {
              userInfo.uid = ref.name();
              $rootScope.currentUser = userInfo;
            });
        }); //push user
    }, //register

很有魅力。为了在用户登录时获取此信息,我尝试在$rootscope上实现一个事件处理程序。我希望它搜索我存储的uid,然后给我记录正确的用户信息。

$rootScope.$on('$firebaseSimpleLogin:login', function (e, authUser) {
  var query = $firebase(firebaseRef.startAt(authUser.uid).endAt(authUser.uid));
  console.log(query);
  $location.path('/meetings');
});

为了使用start At和endAt,我是否必须建立$优先级。当我尝试时,我得到一个错误,说明我不能有任何特殊字符。所以这永远不会起作用。我并不真正关心这些数据是如何存储的,我只想获取数据的索引,以便我可以检索正确的用户。

共有2个答案

阙沛
2023-03-14

多亏了Frank,我才能够找到正确的方法来做到这一点。为了使我自己的用户对象可搜索,我可以使用simpleLogin对象中的uid。所以我的注册函数是这样工作的:

var firebaseRef = new Firebase(FIREBASE_URL);
var simpleLogin = $firebaseSimpleLogin(firebaseRef);

var myObject = {
register: function(user) {
  var myDate = new Date().getTime();

  return simpleLogin.$createUser(user.email, user.password)
    .then(function(regUser) {
        var userInfo = {
            date: myDate,
            md5: regUser.md5_hash,
            firstname: user.firstname,
            lastname: user.lastname,
            email: user.email
          }

        firebaseUsers.$set(regUser.uid, userInfo);
    }); //add user
}, //register
} //my Object

使用set而不是push,我可以将注册用户的uid存储到对象中,然后将要添加的内容作为第二个参数传递。现在,我的数据库将按uid组织用户,可以通过url访问uid。

然后,当用户登录时,Firebase将抛出一个登录事件以及经过身份验证的用户,我可以捕获并使用该事件将当前用户添加到整个应用程序都可以访问的$rootScope。

 $rootScope.$on('$firebaseSimpleLogin:login', function (e, authUser) {
    var ref = new Firebase(FIREBASE_URL + '/users/' + authUser.uid);
    var user = $firebase(ref).$asObject();

    user.$loaded().then(function() {
      $rootScope.currentUser = user;
    });

    $location.path('/meetings');
  });

弗兰克,谢谢你给我指明了正确的方向。

慕意致
2023-03-14

通过使用$push,您可以告诉Firebase为您生成密钥。

这对于通常同时访问所有子级的集合非常有用。但您的用户信息并非如此:您希望访问当前用户的信息。

因此,我将使用用户的uid,而不是使用push添加用户信息。

在常规的Firebase JavaScript API中,可以通过以下方式实现:

firebaseUsersRef.child(reguser.uid).set(userInfo);

AngularFire中的等效项可能使用了$set,但我认为在您的$createUser回调中不需要这样做。

看起来您正试图将信息添加到Firebase为您创建的现有用户节点。这是Firebase文档中关于存储用户数据的示例

  myRef.child('users').child(user.uid).set({
    displayName: user.displayName,
    provider: user.provider,
    provider_id: user.id
  });

您可以看到,他们确实使用子(user.uid)访问用户节点,这与我的建议类似。

据我所知,这里有两个相对较小的错误:

>

  • 当您使用推送/$推送时,您让Firebase为您生成节点名称。在已经有全局唯一ID(例如用户的uid)的情况下,您通常最好使用它作为节点名称。

    如果知道要检索的节点的名称,则不需要查询。您只需以ref.child(user.uid)的身份访问节点即可。

  •  类似资料:
    • 我在我的系统中使用谷歌广告API PHP库。但是我没有在这里提供的API列表中找到以下2个APIhttps://developers.google.com/google-ads/api/docs/account-management/create-account: API,以查明用户是否已经存在使用电子邮件的谷歌广告帐户?如果找到,则返回其10位数的客户ID。 我在几个网站上见过同样的过程。每当用

    • 问题内容: 我正在为我的Firebase应用程序构建一个管理面板,希望可以更轻松地管理用户。我希望能够通过电子邮件查找用户,然后在必要时将其删除。我了解,如果注册了用户以及他们向其注册了哪个提供程序,则fetchSignInMethods将返回一个值,但是仍然可以查询Authentication树(而非数据库树)以通过电子邮件搜索用户吗?能够从Authentication节点获取与电子邮件相关联的

    • 我正在使用新的Google Drive Android API,我可以连接,并且可以做它允许我做的所有事情,但为了使用电子表格服务,我需要从登录用户中提取帐户名/电子邮件。 我该怎么做? 下面是我连接Google Drive API的代码。它工作得很好。 这里是我使用电子表格服务API的地方,但我需要帐户名来获取令牌。 我尝试过添加以下内容: ...在方法中,但它抛出了一个。 此外,以下是我的权限

    • 我正在用自己的谷歌账号玩谷歌的OAuth 2.0游乐场,但我似乎无法用游乐场恢复我的Gmail地址。 我使用的范围是: 但当我调用API时:

    • 问题内容: 我的Android应用程序中有一个Facebook登录选项,但尝试获取用户的电子邮件失败。在用户登录并添加到Parse.com用户表(具有有效的访问令牌)之后,我请求Facebook用户信息,但仅获取其ID和名称(即使电子邮件已设置为权限之一) )。 这是我的代码(在我的按钮的OnClickListener内部): 问题答案: 我想这与Graph API v2.4中的更改有关,该更改使