繁体   English   中英

云 function 重置用户密码不起作用

[英]Cloud function to reset users password isn't working

我正在开发 web 应用程序,该应用程序的部分功能是具有管理员登录名并能够重置用户密码。 我正在使用 firebase 云功能。

resetForm.addEventListener('submit', (e) => {
        console.log("Step 1");
        e.preventDefault();
        let newPass = resetForm['reset-password'].value;
        const resetPasswordFunction = firebase.functions().httpsCallable('resetPassword');
        resetPasswordFunction(docId,newPass).then(() => {
            const modal = document.querySelector('#modal-reset');
          M.Modal.getInstance(modal).close();
          resetForm.reset();
        })
        console.log("Step 1.5");
    });

.

var functions = require('firebase-functions');
var admin = require("firebase-admin");
var serviceAccount = require("./troop-30-elections-web-app-firebase-adminsdk-obsmr-6913a9dca3.json");
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://troop-30-elections-web-app.firebaseio.com"
});

exports.resetPassword = functions.https.onCall((docId,newPass) => {
    console.log("step 2");
    admin.auth().updateUser(docId, {
        password: newPass,
    });
});

我通过填写表格对其进行了测试,但没有任何反应。 我查看了控制台,没有错误,但我看到了 Step 1 和 Step 1.5。

对于可调用类型函数,您必须返回一个 promise,它产生 object 的值,以发送回调用它的客户端应用程序。 promise 必须在所有异步工作完成后才能解决,否则 function 将在工作完成之前关闭。

现在,您的 function 没有返回任何内容,并且忽略了updateUser()返回的 promise 。 Cloud Functions 将在工作完成之前终止 function:promise 将被忽略。 您的代码应改为使用该 promise 并将结果发送回客户端。 这将发送一个空的 object,但您可以在其中做任何您想做的事情:

    return admin.auth().updateUser(docId, { password: newPass })
    .then(() => {
        return {};  // this is what gets sent back to the app
    });

我做了更多的研究并编辑了我的代码。 这有效:

resetForm.addEventListener('submit', (e) => {
        console.log("Step 1");
        e.preventDefault();
        let newPass = resetForm['reset-password'].value;
        const resetPasswordFunction = firebase.functions().httpsCallable('resetPassword');
        resetPasswordFunction({docId: docId, newPass: newPass}).then(() => {
            const modal = document.querySelector('#modal-reset');
          M.Modal.getInstance(modal).close();
          resetForm.reset();
        });
        console.log("Step 1.5");
    });

.

var functions = require('firebase-functions');
var admin = require("firebase-admin");
var serviceAccount = require("./troop-30-elections-web-app-firebase-adminsdk-obsmr-6913a9dca3.json");
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://troop-30-elections-web-app.firebaseio.com"
});

exports.resetPassword = functions.https.onCall((data) => {
  return admin.auth().updateUser(data.docId, { 
    password: data.newPass
   })
  .then(() => {
      return {"text": "User Password Successfully Updated"};  // this is what gets sent back to the app
  });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM