问题描述
我正在使用发送网格电子邮件 API 来发送电子邮件以验证用户帐户。出于某种原因,每次生成 3 封电子邮件而不是一封,每封电子邮件都有不同的令牌。我正在使用相同的方法来生成令牌并发送电子邮件以重置密码,而且效果很好。但是电子邮件验证令牌被发送了 3 次。
import nc from "next-connect";
import crypto from "crypto";
import sgMail from "@sendgrid/mail";
import { connectToDatabase } from "../../../util/mongodb";
export const config = {
api: {
externalResolver: true,},};
const handler = nc().post(async (req,res) => {
const { email } = req.body;
const { db } = await connectToDatabase();
// //TTL Index for auto expiry,will be executed only once for index creation
// db.collection("tokens-email").createIndex(
// { createdAt: 1 },// { expireAfterSeconds: 3600 } //1 hour in seconds
// );
db.collection("users").findOne({ email },(error,user) => {
if (error)
return res
.status(500)
.json({ error: "an unkNown error occured,please try again" });
if (!user) return res.status(400).json({ error: "user doesnt exist" });
if (user.isverified)
return res
.status(200)
.json({ success: "This account has already been verified" });
const { name } = user;
//check if token already exists for this user;
db.collection("tokens-email").findOne({ email },token) => {
if (error)
return res
.status(500)
.json({ error: "an unkNown error occured,please try again" });
//if token already exists,delete this token.
if (token)
db.collection("tokens-email").deleteOne({ email },(error) => {
if (error)
return res
.status(500)
.json({ error: "an unkNown error occured,please try again" });
});
//Create new token and save in db
const newToken = crypto.randomBytes(128).toString("hex");
db.collection("tokens-email").insertOne(
{
createdAt: new Date(),token: newToken,email,(error) => {
if (error)
return res
.status(500)
.json({ error: "there was an unkNown issue,please try again" });
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
const msg = {
to: email,from: "bm@basitminhas.com",subject: "Saqee's Online Store",text:
"Hello " +
name +
",\n\n" +
"Please verify your account by clicking the link:" +
process.env.CLIENT_URL +
"api/confirm/" +
newToken +
"\n\nThank You!\n",};
sgMail
.send(msg)
.then(() =>
res.status(200).json({
success:
"A verification email has been sent to " +
email +
". It will expire after one day. If you didn't get verification Email click on resend token.",})
)
.catch(() =>
res
.status(500)
.json({ error: "technical issue,please click on resend" })
);
}
);
});
});
});
export default handler;
谁能告诉我为什么会发生这种情况以及解决方案是什么??
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)