我可以在 Cloud Functions Http Trigger 中的 Firebase 身份验证上创建用户吗?
Posted
技术标签:
【中文标题】我可以在 Cloud Functions Http Trigger 中的 Firebase 身份验证上创建用户吗?【英文标题】:Can I create a user on Firebase Authentication in Cloud Functions Http Trigger? 【发布时间】:2017-10-04 01:00:33 【问题描述】:是否可以从 Cloud Functions 内部创建用户(电子邮件/密码类型)? 我正在寻找对此的参考,但一无所获。
【问题讨论】:
在控制台上转到您的项目设置并生成服务帐户密钥。这是您可以使用cloud.google.com/iam/docs/… 的官方文档。咻。 【参考方案1】:createUser() 函数让您做到这一点。
admin.auth().createUser(
email: "user@example.com",
emailVerified: false,
password: "secretPassword",
displayName: "John Doe",
photoURL: "http://www.example.com/12345678/photo.png",
disabled: false
)
.then(function(userRecord)
// See the UserRecord reference doc for the contents of userRecord.
console.log("Successfully created new user:", userRecord.uid);
)
.catch(function(error)
console.log("Error creating new user:", error);
);
https://firebase.google.com/docs/auth/admin/manage-users#create_a_user
【讨论】:
我目前正在尝试执行此操作,这会导致“访问请求的资源的权限不足。”。我已经使用 admin.initializeApp(functions.config().firebase) 初始化了应用程序 我们可以通过云功能添加不同类型的角色吗? 添加到第一行 admin.initializeApp()【参考方案2】:使用这个基于 Http 的函数使端点创建用户。
链接将是这样的。 https://us-central1-FIREBASE-PROYECT.cloudfunctions.net/register
exports.register = functions.https.onRequest((request,response)=>
if (request.method !== "POST")
response.status(400).send("what are you trying baby?");
return 0;
const email = request.body.email;
const pass = request.body.pass;
admin.auth().createUser(
email: email,
emailVerified: true,
password: pass,
)
.then(function(userRecord)
// See the UserRecord reference doc for the contents of userRecord.
console.log("Conductor " + email + "Creado" );
response.send("uid":userRecord.uid);
return 1;
)
.catch(function(error)
response.send("Error: "+error);
console.log("Error creating new user:", error);
return 1;
);
return 1;
);
【讨论】:
【参考方案3】:对于遇到@tonsteri 问题“访问所请求资源的权限不足”的任何人:
要解决您的权限不足问题,您需要更新到云功能包的 v2。我在使用 v1 时遇到了同样的问题 - 升级解决了这个问题。
我会在线回复,但我缺乏足够的声誉。
【讨论】:
【参考方案4】:根据@mike-brian-olivera的回答我做了一个功能云,你可以在前端调用
exports.register = functions.https.onCall((data, context) =>
const email, pass = data;
return admin
.auth()
.createUser(
email,
password: pass,
)
.then(userRecord =>
// See the UserRecord reference doc for the contents of userRecord.
console.log( uid: userRecord.uid );
return success: userRecord.uid ;
)
.catch(error =>
return error: error.message ;
);
);
【讨论】:
admin 是在哪里定义的?【参考方案5】:前段时间我遇到了完全相同的问题,这就是我在打字稿中解决它的方法:
admin.initializeApp();
const db = admin.firestore();
export const createUsr = functions.https.onCall((data) =>
return admin.auth().createUser(
email: data.email,
emailVerified: true,
password: data.password,
displayName: data.nombre,
disabled: false,
photoURL: data.urldeImagen
).then(
(userRecord) =>
console.log('Se creó el usuario con el uid: ' + userRecord.uid);
const infoUsr =
Activo: false,
Contrasenia: data.password,
Correo: data.email,
Foto: data.nombrefoto,
Llave: userRecord.uid,
Nombre: data.nombre,
PP: false,
Privilegios: data.privilegios,
UrldeImagen: data.urldeImagen
;
//update your db
return db.collection....
).catch((error) =>
console.log(error);
return error
);
);
【讨论】:
以上是关于我可以在 Cloud Functions Http Trigger 中的 Firebase 身份验证上创建用户吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Google Cloud Functions 的 python 环境中检查 HTTP 基本身份验证
如何从 Google Cloud Functions (nodeJS) 发送 HTTP 请求
如何在 Cloud Functions for Firebase 中发出 HTTP 请求?
如何在 Cloud Functions for Firebase 中使 HTTP 请求异步/等待?