Flutter调用Firebase云功能admin.auth.updateUser

卡勒姆·克利夫特

编辑**

好的,所以我能够通过提供的第一个答案使参数正常工作,但是现在我遇到了一个问题,即我的功能完全在Firebase中创建了一个新用户,而不更新现有的用户,即我要传递给auth.admin的uid。 .updateUser是我要更新的电子邮件的现有用户的uid。这是更新的云功能,它将添加新用户而不是更新现有用户:

    exports.updateEmail = functions.https.onCall((data, context) => {

  const email = data.email;
  const uid = data.uid;

  admin.auth().updateUser(uid, {
              email: email
          })
          .then(function(userRecord) {
              // See the UserRecord reference doc for the contents of userRecord.
              console.log("Successfully updated user", userRecord.toJSON());
              return response.status(200).json(userRecord.toJSON());
          })
          .catch(function(error) {
              console.log("Error updating user:", error);
              return response.status(404).json({
                  error: 'Something went wrong.'
              });
          });
});

我从firebase文档中获得了该功能,但是它没有按照我的预期去做。

原始邮件**

从Flutter代码中调用云函数时,我遇到了一些困难。我遇到的问题是,即使我使用busboy字段将uid和email字段传递给云函数,也没有定义。

我正在尝试将电子邮件和uid字段传递给函数,如下所示:

final request = http.MultipartRequest('POST', Uri.parse('****************my function url************'));

request.fields['email'] = Uri.encodeComponent(newEmail);
request.fields['uid'] = Uri.encodeComponent(selectedUser.uid);

request.headers['Authorization'] = 'Bearer ${_authenticatedUser.token}';

  final http.StreamedResponse streamedResponse = await request.send();

在Node.js方面,我试图通过busboy使用这些字段,这是Node.js中的云函数:

exports.changeEmail = functions.https.onRequest((request, response) => {

if (!request.headers.authorization ||
    !request.headers.authorization.startsWith('Bearer ')
) {
    return response.status(401).json({
        error: 'Unauthorized.'
    });
}

let idToken;
idToken = request.headers.authorization.split('Bearer ')[1];
let email;
let uid;

const busboy = new Busboy({
    headers: request.headers
});

busboy.on('field', (fieldname, value) => {

    if (fieldname == 'email') {


        email = decodeURIComponent(value);
    }

    if (fieldname == 'uid') {

        uid = decodeURIComponent(value);
    }
});



admin.auth().updateUser(uid, {
        email: email
    })
    .then(function(userRecord) {
        // See the UserRecord reference doc for the contents of userRecord.
        console.log("Successfully updated user", userRecord.toJSON());
        return response.status(200).json(userRecord.toJSON());
    })
    .catch(function(error) {
        console.log("Error updating user:", error);
        return response.status(404).json({
            error: 'Something went wrong.'
        });
    });

});

即使我通过busboy字段传递字段,但未在函数中设置它们,在这里我在做错什么吗?

里卡多·斯马尼亚(Ricardo Smania)

为什么不使用可调用函数它将自动接收身份验证数据。

该文档甚至包含有关如何获取uid和电子邮件的示例:

声明功能:

exports.addMessage = functions.https.onCall((data, context) => {
  // ...
});

从context参数获取用户属性:

// Message text passed from the client.
const text = data.text;
// Authentication / user information is automatically added to the request.
const uid = context.auth.uid;
const name = context.auth.token.name || null;
const picture = context.auth.token.picture || null;
const email = context.auth.token.email || null;

从Flutter代码中调用该函数:

安装cloud_functions软件包,然后:

import 'package:cloud_functions/cloud_functions.dart';

await CloudFunctions.instance.call(functionName: 'addMessage');

如果在调用函数之前对用户进行了身份验证,那么您需要做的所有事情。

您还可以将其他参数传递给该函数:

await CloudFunctions.instance.call(functionName: 'addMessage', parameters: {"email": "[email protected]"});

任何参数都将传递给函数侧的data参数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

firebase:admin.auth()。updateUser()导致auth / user-token-expired

调用云功能admin.auth()。从的createUser()Android不工作

InMemoryUserDetailsManager updateUser调用后未获取更新的密码

使用 firebase admin Auth 在 HTTPS 调用期间进行云功能和客户端身份验证

是否可以使用Firebase Auth保护我的云功能,但不使用可调用的云功能。(仅HTTP请求)

Firebase 云功能,无需 AUTH 即可发送邮件

坚持用户Auth Flutter Firebase

Flutter:Firebase Auth 无限循环

在 dispose 之后调用 Flutter auth firebase getx setstate()

用户更新电子邮件时的Firebase auth onUpdate云功能

firebase云功能-可以使用https.onCall(....)Context.Auth吗?

Firebase:从云功能调用云功能

Flutter Web App,Firebase.auth无法正常工作。尝试调用非函数,例如null。'dart.global.firebase.auth'

无法识别Firebase auth()子功能

Firebase Auth JS / PHP

Firebase Auth + Electron =失败?

Firebase Auth 登录区别

不同权限 Firebase Auth

Firebase Auth +自己的Api

Firebase Auth + FCM

Firebase Auth与Flutter的电子邮件

捕获Flutter / Firebase Auth中的错误

AUTH API REST Firebase Flutter 與 POSTMAN

firebase.auth.Auth.signInWithCredential已弃用。请改用firebase.auth.Auth.signInAndRetrieveDataWithCredential

我可以使用GCP基础架构作为代码来设置Firebase Auth,Firestore,RDB,云功能吗?

/ admin / auth / user /中的TypeError

SQLDecodeError位于/ admin / auth / user /

仅从 Firebase-Admin SDK (Python) 安装 Firebase Auth

Auth0 调用接口