我可以在 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 请求异步/等待?

如何从 Cloud Functions 连接 Google Cloud SQL?

Cloud Tasks + Cloud Functions - 重复执行