在管理控制台中使用电子邮件和密码创建用户会导致匿名用户
Creating user with email and password in admin console results in anonymous user
我正在使用管理 SDK 创建用户,我希望他们能够使用电子邮件和密码登录。出于某种原因,当我仅使用电子邮件和密码通过客户端创建用户时,用户可以使用这些凭据登录,但是当我使用 admin SDK 创建用户时,用户在身份验证仪表板中显示为匿名,并且用户可以' 使用他们的电子邮件和密码登录。客户端或 Firebase 端均未显示任何错误。
如何使用管理 SDK 创建 Firebase 用户并将该用户链接到电子邮件身份验证?
节点:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.createUser = functions.https.onRequest(async (req, res) => {
//grab the email and password parameters
await admin.auth().createUser({
email: req.query.email,
password: req.query.password
})
//create the user
.then(function(userRecord) {
const child = userRecord.uid;
console.log('Successfully created new user:', userRecord.uid);
res.json({
status: 201,
data: {
"message": userRecord.uid
}
});
})
//handle errors
.catch(function(error) {
console.log();
res.json({
status: 500,
data: {
"error": 'error creating user: ', error
}
});
});
});
Swift:
func createChild(for parent: Parent,
with firstName: String,
lastName: String,
displayName: String?,
chores: [Chore]?,
username: String,
password: String,
completion: @escaping () -> Void = { }) {
let funcCallDict = [
"email": username,
"password": password
]
functions.httpsCallable(addChildIdentifier).call(funcCallDict) { (result, error) in
if let error = error {
NSLog("error: adding child with firebase function: \(error)")
completion()
return
}
}
completion()
}
你的函数是 HTTP type trigger:
exports.createUser = functions.https.onRequest
但您正试图将其作为 callable type trigger:
functions.httpsCallable(addChildIdentifier).call(funcCallDict)
(请注意,可调用触发器将定义为 onCall
,而不是 onRequest
。)
正如您从文档链接中看到的,它们不是一回事。您可能正在调用 HTTP 触发器,它实际上并没有从客户端获得您期望的参数,因为它们之间的协议不同。尝试在函数中记录 req.query.email
以了解我的意思。
您必须使您的函数成为适当的可调用函数,以便可以使用提供的库从客户端调用它,或者更改您在客户端调用它的方式以使用常规 http 库而不是 Firebase 库.
我正在使用管理 SDK 创建用户,我希望他们能够使用电子邮件和密码登录。出于某种原因,当我仅使用电子邮件和密码通过客户端创建用户时,用户可以使用这些凭据登录,但是当我使用 admin SDK 创建用户时,用户在身份验证仪表板中显示为匿名,并且用户可以' 使用他们的电子邮件和密码登录。客户端或 Firebase 端均未显示任何错误。
如何使用管理 SDK 创建 Firebase 用户并将该用户链接到电子邮件身份验证?
节点:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.createUser = functions.https.onRequest(async (req, res) => {
//grab the email and password parameters
await admin.auth().createUser({
email: req.query.email,
password: req.query.password
})
//create the user
.then(function(userRecord) {
const child = userRecord.uid;
console.log('Successfully created new user:', userRecord.uid);
res.json({
status: 201,
data: {
"message": userRecord.uid
}
});
})
//handle errors
.catch(function(error) {
console.log();
res.json({
status: 500,
data: {
"error": 'error creating user: ', error
}
});
});
});
Swift:
func createChild(for parent: Parent,
with firstName: String,
lastName: String,
displayName: String?,
chores: [Chore]?,
username: String,
password: String,
completion: @escaping () -> Void = { }) {
let funcCallDict = [
"email": username,
"password": password
]
functions.httpsCallable(addChildIdentifier).call(funcCallDict) { (result, error) in
if let error = error {
NSLog("error: adding child with firebase function: \(error)")
completion()
return
}
}
completion()
}
你的函数是 HTTP type trigger:
exports.createUser = functions.https.onRequest
但您正试图将其作为 callable type trigger:
functions.httpsCallable(addChildIdentifier).call(funcCallDict)
(请注意,可调用触发器将定义为 onCall
,而不是 onRequest
。)
正如您从文档链接中看到的,它们不是一回事。您可能正在调用 HTTP 触发器,它实际上并没有从客户端获得您期望的参数,因为它们之间的协议不同。尝试在函数中记录 req.query.email
以了解我的意思。
您必须使您的函数成为适当的可调用函数,以便可以使用提供的库从客户端调用它,或者更改您在客户端调用它的方式以使用常规 http 库而不是 Firebase 库.