You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// 10 - сіль - набір випадкових символів - складність алгоритму генерації солі
23
23
24
24
constavatarURL=gravatar.url(email);// генеруємо посилання на тимчасову аватарку по email-у користувача
25
-
constverificationCode=nanoid();
26
-
constnewUser=awaitUser.create({ ...req.body,password: hashPassword, avatarURL,verificationCode})// в БД зберігаємо пароль у захешованому вигляді (post-запит)
25
+
constverificationToken=nanoid();
26
+
constnewUser=awaitUser.create({ ...req.body,password: hashPassword, avatarURL,verificationToken})// в БД зберігаємо пароль у захешованому вигляді (post-запит)
27
27
28
28
constverifyEmail={
29
29
to: email,// кому буде приходити email на підтвердження (можна використати тимчасову пошту на https://temp-mail.org/uk/)
30
-
subject: 'Verify email 2',
31
-
html: `<a target='_blank' href="${BASE_URL}/api/auth/verify/${verificationCode}">Let's verify your email so you can start login. Click here to verify.</a>`
30
+
subject: 'Verify email 7',
31
+
html: `<a target='_blank' href="${BASE_URL}/api/auth/verify/${verificationToken}">Let's verify your email so you can start login. Click here to verify.</a>`
32
32
}// при переході за посиланням спрацьовує GET-запит
33
-
// Congratulations! Your sender identity has been successfully verified.
// Зміна статусу email-у на "верифікований" та очищення верифікаційного коду в БД після підтвердження пошти в отриманому листі
46
46
constverifyEmail=async(req,res)=>{
47
-
const{verificationCode}=req.params;
48
-
constuser=awaitUser.findOne({verificationCode});// перевіряємо чи є в БД користувач з таким кодом
47
+
const{verificationToken}=req.params;
48
+
constuser=awaitUser.findOne({ verificationToken });// перевіряємо чи є в БД користувач з таким кодом
49
49
if(!user){
50
50
throwHttpError(401,'Email is not found')
51
51
}
52
-
awaitUser.findByIdAndUpdate(user._id,{verify: true,verificationCode: ''});// якщо є такий користувач, то вносимо зміни до БД
53
-
54
-
console.log('user:',user);
52
+
awaitUser.findByIdAndUpdate(user._id,{verify: true,verificationToken: ""});// якщо є такий користувач, то вносимо зміни до БД
55
53
56
54
res.json({
57
-
message: "The email is successfully verified."
55
+
message: "Congratulations! The email has been successfully verified."
58
56
})
59
57
};
60
58
61
59
constresendVerifyEmail=async(req,res)=>{
62
60
const{ email }=req.body;
63
-
constuser=awaitUser.findOne({email});
61
+
constuser=awaitUser.findOne({email});
64
62
if(!user){
65
63
throwHttpError(401,'Email is not found');
66
64
}
67
-
if(user.verify){//якщо користувач не підтвердив email (user.verify = false)
68
-
throwHttpError(401,'The email is already verified')
65
+
if(user.verify){//якщо користувач вже підтвердив email (user.verify = true)
66
+
throwHttpError(401,'The email is already verified')// не спрацює, бо спочатку Postman видасть "Email already in use"
69
67
}
70
68
constverifyEmail={
71
69
to: email,
72
70
subject: 'Verify email',
73
-
html: `<a target='_blank' href="${BASE_URL}/api/auth/verify/${user.verificationCode}">Let's verify your email so you can start login. Click here to verify.</a>`,
71
+
html: `<a target='_blank' href="${BASE_URL}/api/auth/verify/${user.verificationToken}">Let's verify your email so you can start login. Click here to verify.</a>`,
74
72
};
75
-
awaitsendEmail(verifyEmail);
73
+
awaitsendEmail(verifyEmail);//якщо користувач ще не підтвердив email
76
74
77
75
res.json({
78
-
message: 'Verification email is resent.'
76
+
message: 'Congratulations! The email has been successfully verified.'
router.get('/verify/:verificationToken',authCtrl.verifyEmail);// на пошту приходить лист з посиланням для верифікації (при переході по ньому спрацьовує цей GET-запит)
0 commit comments