비밀번호 찾기 링크를 한 번 만들고 nodeJS에서 10분 후에 만료됩니다.
그러나 토큰에서는 한 번만 만들지 않으므로 성공적으로 OTP를 확인한 후 데이터베이스에 저장하여 데이터베이스에서 제거했습니다.
몽구스 모델에서 필드 이름을 추가합니다. otp에는 번호가 있고 10분 후에 필드가 만료됩니다.
user.model.js
const mongoose = require("mongoose")
const userSchema = new mongoose.Schema({
name:{
type:String,
required:true,
trim:true
},
email:{
type:String,
required:true
},
otp:{
type:Number,
expires:'10m',
index:true
},
imageUrl:{
type:String,
default:'avatar.png'
}
})
module.exports = mongoose.model('User',userSchema)
user.controller.js
module.exports.forgetPassword =async (req,res,next)=>{
try{
const {email} = req.body
User.findOne({email}).exec(function(err,user){
if(err) throw err;
if(!user){
res.json({"error":"User not
found"})
}
else{
let otp=Math.random().toString(5);
user=await User.findOneAndUpdate({
_id:user._id},
{$set :{otp}},{new:true});
const {_id,email} = user;
let token=jwt.sign({_id,email,tokenId:uuidv4()},"SECRET_TOKEN",{expiresIn: '10m' });
let url=HOST_URL+token;
await sendMail(email,"forget password link",url,`your otp is ${user.otp}`);
res.status(200).send({message:"send link to your mail"});
}
}
}catch(err){
next(err)
}
}
module.exports.verifyOtp =async (req,res,next)=>{
try{
//email get from token
const {email,otp}=req.body;
User.findOne({email,otp}).exec(function(err,user){
if(err) throw err
if(!user){
res.json({"error":"Link is Expired"})
}
else{
await User.updateOne({_id:user._id},{$set:{otp:null}});
const token=jwt.sign({_id:user._id,tokenId:uuidv4()},"SECRET_TOKEN")
res.header("token",token).json({message:"otp verification success"})
}
}
}catch(err){
next(err)
}
}
토큰이 만료되면 클라이언트 측에서 확인하고 메시지 토큰이 만료됩니다.
Reference
이 문제에 관하여(비밀번호 찾기 링크를 한 번 만들고 nodeJS에서 10분 후에 만료됩니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/deepakjaiswal/create-a-forget-password-link-for-one-time-and-expire-in-10-minutes-in-nodejs-2le6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)