Firebase Function 403调用函数时出现禁止错误?
Firebase Function 403 Forbidden error when function invoked?
第一次发帖,如有不妥,敬请见谅。我目前正在尝试构建一个 firebase 函数,该函数从联系表单中获取输入并使用 nodemailer 通过电子邮件将其发送给我。
提交表单时调用该函数,结果是
Error
根据我在网上阅读的内容,该错误与授权有关,通常可以通过将 'allUsers' 添加到云功能仪表板中的滚动 'Cloud function invoker' 来解决。我已经试过了,但没有解决问题。
如果有人能提供任何帮助,我将不胜感激!
谢谢。
我的 Firebase 函数是:
const functions = require("firebase-functions");
// // Create and Deploy Your First Cloud Functions
// // https://firebase.google.com/docs/functions/write-firebase-functions
//
// exports.helloWorld = functions.https.onRequest((request, response) => {
// functions.logger.info("Hello logs!", {structuredData: true});
// response.send("Hello from Firebase!");
// });
const nodemailer = require("nodemailer");
const cors = require("cors")({ origin: true });
/** * using gmail with nodemailer */
let transporter = nodemailer.createTransport({
host: "smtp.gmail.com",
port: 465, secure: true,
auth: {
user: "Myemail@gmail.com",
pass: "********",
},
});
exports.sendMail = functions.https.onRequest((req, res) => {
cors(req, res, () => { // getting dest email by query string
const email = req.query.email;
const name = req.query.name;
const message = req.query.message;
const mailOptions = {
from: "Myemail@gmail.com",
to: "Myemail@gmail.com",
subject:"Contact Form Message", // email subject
html: ` <div> From:` + name + `<br /><br />
Email: ` + email + `<br /><br />
Message:` + message + `<br /><br /> </div> `, // email content in HTML
};
// returning result
return transporter.sendMail(mailOptions, (erro, info) => {
if (erro) {
return res.send(erro.toString());
}
return res.send("Message Sent");
});
});
});
联系方式 html 是:
<section id="contact_form">
<div class="container-out">
<div class="container-in">
<div class="contact-form">
<p>Name</p>
<input type="text" id="contact-name" />
<p>Email</p>
<input type="email" id="contact-email" />
<p>Message</p>
<textarea id="contact-message"></textarea>
<button id="send">Send</button>
</div>
</div>
</div>
</section>
Javascript 函数是:
<script type="text/javascript">
document.getElementById("send").addEventListener("click", validateForm);
function validateForm() {
//gets the name
var name = document.getElementById("contact-name").value;
//gets the email
var email = document.getElementById("contact-email").value;
//gets the message
var message = document.getElementById("contact-message").value;
//checks if all fields have been filled before sending message.
if (name.trim() == "" || email.trim() == "" || message.trim() == "") {
alert("all fields must be filled");
} else {
sendMessage(name, email, message);
}
}
//sends information to firebase
function sendMessage(name, email, message) {
//sends the name, email and message by passing them as url parameters
window.location.href =
"https://us-central1-ccatest-dfd51.cloudfunctions.net/sendMail" +
"name="
+
name +
"&email=" +
email +
"&message=" +
message +
"";
}
</script>
问题出在您尝试访问的URL(它试图访问缺少的函数但被拒绝):
/sendMailname=John%20Smith&email=Jsmith@gmail.com&message=Test%20contact%20form
应该是:
/sendMail?name=John%20Smith&email=Jsmith@gmail.com&message=Test%20contact%20form
^
第一次发帖,如有不妥,敬请见谅。我目前正在尝试构建一个 firebase 函数,该函数从联系表单中获取输入并使用 nodemailer 通过电子邮件将其发送给我。 提交表单时调用该函数,结果是 Error
根据我在网上阅读的内容,该错误与授权有关,通常可以通过将 'allUsers' 添加到云功能仪表板中的滚动 'Cloud function invoker' 来解决。我已经试过了,但没有解决问题。
如果有人能提供任何帮助,我将不胜感激!
谢谢。
我的 Firebase 函数是:
const functions = require("firebase-functions");
// // Create and Deploy Your First Cloud Functions
// // https://firebase.google.com/docs/functions/write-firebase-functions
//
// exports.helloWorld = functions.https.onRequest((request, response) => {
// functions.logger.info("Hello logs!", {structuredData: true});
// response.send("Hello from Firebase!");
// });
const nodemailer = require("nodemailer");
const cors = require("cors")({ origin: true });
/** * using gmail with nodemailer */
let transporter = nodemailer.createTransport({
host: "smtp.gmail.com",
port: 465, secure: true,
auth: {
user: "Myemail@gmail.com",
pass: "********",
},
});
exports.sendMail = functions.https.onRequest((req, res) => {
cors(req, res, () => { // getting dest email by query string
const email = req.query.email;
const name = req.query.name;
const message = req.query.message;
const mailOptions = {
from: "Myemail@gmail.com",
to: "Myemail@gmail.com",
subject:"Contact Form Message", // email subject
html: ` <div> From:` + name + `<br /><br />
Email: ` + email + `<br /><br />
Message:` + message + `<br /><br /> </div> `, // email content in HTML
};
// returning result
return transporter.sendMail(mailOptions, (erro, info) => {
if (erro) {
return res.send(erro.toString());
}
return res.send("Message Sent");
});
});
});
联系方式 html 是:
<section id="contact_form">
<div class="container-out">
<div class="container-in">
<div class="contact-form">
<p>Name</p>
<input type="text" id="contact-name" />
<p>Email</p>
<input type="email" id="contact-email" />
<p>Message</p>
<textarea id="contact-message"></textarea>
<button id="send">Send</button>
</div>
</div>
</div>
</section>
Javascript 函数是:
<script type="text/javascript">
document.getElementById("send").addEventListener("click", validateForm);
function validateForm() {
//gets the name
var name = document.getElementById("contact-name").value;
//gets the email
var email = document.getElementById("contact-email").value;
//gets the message
var message = document.getElementById("contact-message").value;
//checks if all fields have been filled before sending message.
if (name.trim() == "" || email.trim() == "" || message.trim() == "") {
alert("all fields must be filled");
} else {
sendMessage(name, email, message);
}
}
//sends information to firebase
function sendMessage(name, email, message) {
//sends the name, email and message by passing them as url parameters
window.location.href =
"https://us-central1-ccatest-dfd51.cloudfunctions.net/sendMail" +
"name="
+
name +
"&email=" +
email +
"&message=" +
message +
"";
}
</script>
问题出在您尝试访问的URL(它试图访问缺少的函数但被拒绝):
/sendMailname=John%20Smith&email=Jsmith@gmail.com&message=Test%20contact%20form
应该是:
/sendMail?name=John%20Smith&email=Jsmith@gmail.com&message=Test%20contact%20form
^