我正在尝试通过电子邮件吸引用户,这似乎很简单。我正在关注这个documentation
似乎我的代码无法识别admin
,这是正常的原因,因为我在任何地方都没有定义。我所做的就是将admin
的{{1}}更改为firebase:
firebase
,代码为:
import * as firebase from "firebase/app";
但出现以下错误:
类型'Auth'.ts(2339)上不存在属性'getUserByEmail'
我需要预先安装一些东西吗?我想念什么吗?
我的目的是获取在我的系统上注册的所有用户电子邮件的列表,然后对其进行过滤,或者通过查看电子邮件直接访问特定的用户(第二种选择会更好)。
更新 现在,每次有人登录时,我都会创建一个用户列表,但是我认为firebase限制了信息的发布。
注册
firebase.auth.getUserByEmail(participantEmail)
插入列表
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()
中得到了user
的值而没有问题
答案 0 :(得分:1)
这样做
import * as firebase from "firebase/app";
在客户端应用程序中,您实际上是在导入JavaScript SDK而不是Admin SDK。如果此导入是在前端应用程序中完成的,则这是正确的方法,因为Admin SDK将“从安全服务器环境中”使用。
这就是为什么出现错误Property 'getUserByEmail' does not exist on type 'Auth'.ts(2339)
的原因,因为此方法不是Firebase Auth
服务的一部分。
话虽如此,您必须知道,使用JavaScript SDK并没有直接的方法“获取在[您的]系统上注册的所有用户电子邮件的列表”。
“通常”的做法是维护数据库(实时数据库或Firestore)中的用户列表,并根据需要查询数据库。
答案 1 :(得分:1)
就像您指出的那样:getUserByEmail
只是admin SDK的一部分,您将无法从Angular代码中调用它。
如果您的应用具有查找或管理其他用户的概念,则您可能会认为这些用户是您的业务数据的一部分。因此,在创建身份验证帐户(you can read more here)时复制并创建配置文件数据。
您可以找到有关Firebase用户对象in the documentation上可用的哪些信息的更多信息。只需复制所需内容,然后将其存储在可从Angular应用程序查询的集合中即可。
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);
});
答案 2 :(得分:0)
只有Firebase Admin SDK可以从Firebase身份验证获取用户。 Admin SDK仅应在安全环境(即后端服务器)中使用。
您可以做的是使用Firebase云功能Auth creation trigger,然后在您的Firebase数据库/ Firestore中写入电子邮件地址。 然后,您可以query your database在angular应用程序中根据电子邮件地址过滤掉用户。
另一种选择是具有HTTPS功能,可以向其发送电子邮件地址,然后该功能可以使用admin sdk从Firebase身份验证中提取用户。