我试图通过电子邮件得到一个用户,这似乎是相当简单的。我在跟踪这个文档
我的代码似乎不认识admin,这是正常的,因为我没有在任何地方定义它。我所做的就是将admin改为firebase,作为防火墙:
import * as firebase from "firebase/app";守则是:
firebase.auth.getUserByEmail(participantEmail)但我得到了以下错误:
属性'getUserByEmail‘在’Auth‘..ts类型中不存在(2339)
我需要预先安装一些东西吗?我错过了什么吗?
我的目标是获取在我的系统上注册的所有用户的电子邮件列表,然后过滤它们,或者通过查看电子邮件直接访问特定的用户(第二个选项会更好)。
UPDATE现在我要在每次有人登录时创建一个用户列表,但是我认为防火墙在某种程度上限制了这些信息。
寄存器
registerUser(
email: string,
pass: string,
displayName: string,
photoURL: string
) {
return new Promise((resolve, reject) => {
this.afAuth.auth.createUserWithEmailAndPassword(email, pass).then(
user => {
resolve(user);
user.updateProfile({
displayName: displayName, // some displayName
photoURL: photoURL
});
//NEEDS TO BE INSIDE UPDATEPROFILE
this.insertUser(user);
},
err => {
this.s_registerError = err.message;
reject(err);
}
);
});
}插入列表
//Insert a new bet
insertUser(user) {
console.log(user);
console.log(user.email);
console.log(user.displayName);
this.listToStore = this.db.list("users");
this.listToStore.push({
photoURL: user.photoURL,
email: user.email,
displayName: user.displayName
});
}在这里,我在所有字段中得到了user的值,这意味着当我使用console.log(user)时,我能够看到displayName、email和photoURL。然而,如果我尝试使用console.log(user.displayName)打印null,如果我使用console.log(user.email),则打印它的值。
我认为这可能是因为user.updateProfile()没有完成,但实际上,我在insertUser()中得到了user的值,没有任何问题。
发布于 2019-03-20 09:56:00
通过做
import * as firebase from "firebase/app";在您的客户端应用程序中,您实际上是导入JavaScript SDK而不是管理SDK。如果此导入是在前端应用程序中完成的,这是正确的方法,因为Admin将被使用“来自安全的服务器环境”。
这就是获得错误Property 'getUserByEmail' does not exist on type 'Auth'.ts(2339)的原因,因为此方法不是Firebase Auth服务的一部分。
话虽如此,但您必须知道,使用JavaScript SDK,没有一种简单的方法可以“获取在您的系统上注册的所有用户的电子邮件列表”。
这样做的“通常”方法是维护数据库中的用户列表(RealTime数据库或Firestore),并根据需要查询数据库。
发布于 2019-03-20 10:12:50
正如您已经指出的:getUserByEmail仅仅是admin的一部分,您将无法从您的角度代码调用它。
如果您的应用程序有查找或管理其他用户的概念,那么您可能会认为用户是您业务数据的一部分。因此,在创建auth帐户(你可以在这里读到更多)时,复制和创建配置文件数据。
您可以找到有关在firebase用户对象在文件中上可用的信息的更多信息。只需复制您需要的,并将其存储在一个集合中,您可以从您的角度应用程序中查询它。
export const createUserDoc = functions.auth.user().onCreate(event => {
const firebaseUser = event.data;
const user = {
name: firebaseUser.displayName,
email: firebaseUser.email,
photoUrl: firebaseUser.photoURL
};
return firebase.firestore().collection("users").doc(firebaseUser.uid).set(user);
});https://stackoverflow.com/questions/55257516
复制相似问题