Node.js:如何通过uid在firebase身份验证中查找用户?

时间:2018-02-26 08:19:48

标签: node.js firebase firebase-authentication

我对节点和创建一个web-app很新,我使用passport进行身份验证,然后通过自定义令牌使用firebase身份验证来存储用户。

现在我想执行查找并检查用户是否已在我的应用程序中注册。

有没有办法检查特定用户(比如他们的uid或电子邮件)?

文档here中的

给出了如何列出所有用户的信息。

这是它的代码(我为了我的目的修改了一点) -

function listAllUsers(id, nextPageToken) { // passing an id to check and page token is not passed as default
  // List batch of users, 1000 at a time.
  admin.auth().listUsers(1000, nextPageToken)
    .then(function(listUsersResult) {
      listUsersResult.users.forEach(function(userRecord) {
        if (userRecord.uid == id){
              return true // here i return from the function but it only return from one function. (do i have to make a flag to come out from all of them?)
            }
      });
      if (listUsersResult.pageToken) {
        // List next batch of users.
        listAllUsers(id, listUsersResult.pageToken)
      }
    })
    .catch(function(error) {
      console.log("Error listing users:", error);
    });
}
// Start listing users from the beginning, 1000 at a time.
let user = listAllUsers('some random id'); // i expect a Boolean here

但有没有办法像listUsersResult.users.find(id) // which may return a boolean or whole user?

那样进行查找

2 个答案:

答案 0 :(得分:2)

查看您链接的文档以及我自己在firebase中玩过一些文档,没有返回找到/未找到布尔值的方法。但是,您可以这样做:

admin.auth().getUser(uid)
  .then(function(userRecord) {
       // See the UserRecord reference doc for the contents of userRecord.
       console.log("Successfully fetched user data:", userRecord.toJSON());
  })
  .catch(function(error) {
      console.log("Error fetching user data:", error);
  });

正如他们的文档引用的那样:

  

如果提供的uid不属于现有用户,或者因任何其他原因无法提取用户,则上述方法会引发错误。

如果你想要一个布尔值,只需在then...catch中设置一个布尔值来判断用户是否被找到。

例如:

let found = false;

admin.auth().getUser(uid)
  .then(function(userRecord) {
      found = true;
  })
  .catch(function(error) {
      found = false;
  });

修改

要返回基函数,最好的方法(就Node而言)是使函数与回调/ Promise / Observable异步。由于Promise更新,我将在这里创建一个:

var user_check = new Promise(function(resolve, reject) {
    admin.auth().getUser(uid)
      .then(function(userRecord) {
          resolve(userRecord);
      })
      .catch(function(error) {
          reject(error);
      });
});
console.log(user_check); // if found, returns the user_record, else, returns an error

有关异步代码的详细信息,请参阅MSDN

答案 1 :(得分:1)

请参阅documentation。您可以为此致电admin.auth.getUser(uid)(也是see the API docs)。