重置用户密码的云功能不起作用
Cloud function to reset users password isn't working
我正在开发一个网络应用程序,该应用程序的部分功能是拥有管理员登录名并能够重置用户密码。我正在使用 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,
});
});
我通过填写表格进行了测试,没有任何反应。我查看了控制台,没有错误,但我看到了第 1 步和第 1.5 步。
对于可调用类型的函数,您有义务return 承诺产生对象的值以发送回调用它的客户端应用程序。该承诺必须仅在所有异步工作完成时解决,否则该功能将在工作完成前关闭。
现在,您的函数 return 什么都没有,并且忽略了 return 由 updateUser() 做出的承诺。 Cloud Functions 在工作完成之前终止函数:promise 被忽略。您的代码应该改为使用该承诺并将结果发送回客户端。这将发送一个空对象,但您可以在其中做任何您想做的事情:
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
});
});
我正在开发一个网络应用程序,该应用程序的部分功能是拥有管理员登录名并能够重置用户密码。我正在使用 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,
});
});
我通过填写表格进行了测试,没有任何反应。我查看了控制台,没有错误,但我看到了第 1 步和第 1.5 步。
对于可调用类型的函数,您有义务return 承诺产生对象的值以发送回调用它的客户端应用程序。该承诺必须仅在所有异步工作完成时解决,否则该功能将在工作完成前关闭。
现在,您的函数 return 什么都没有,并且忽略了 return 由 updateUser() 做出的承诺。 Cloud Functions 在工作完成之前终止函数:promise 被忽略。您的代码应该改为使用该承诺并将结果发送回客户端。这将发送一个空对象,但您可以在其中做任何您想做的事情:
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
});
});