我对节点和创建一个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?
答案 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)。