**已关闭。**此问题为not reproducible or was caused by typos。目前不接受回答。
这个问题是由错字或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
昨天就关门了。
Improve this question
Error: Incorrect activation link
at UserService.activate (/Users/andrii/Desktop/Курсова/Dentelo_git/server/service/user-service.js:38:19)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async activate (/Users/andrii/Desktop/Курсова/Dentelo_git/server/controllers/user-controller.js:38:13)
的一个字符串
这是我的代码
API_URL = http://localhost:5000
CLIENT_URL = http://google.com/
型
- 用户服务.js*
const UserModel = require('../models/user-model');
const bcrypt = require('bcrypt');
const uuid = require('uuid');
const mailService = require('./mail-service');
const tokenService = require('./token-service');
const UserDto = require('../dtos/user-dto');
class UserService {
async registration(email, password) {
// Перевіряємо чи існує користувач з таким токеном.
const candidate = await UserModel.findOne({email})
// Якщо користувача за токеном не знайдено тоді виводимо помилку.
if(candidate) {
throw new Error(`Користувач з таким емейлом ${email} вже існує`)
}
// Хешуємо пароль
const hashPassword = await bcrypt.hash(password, 3);
// силка для активації
const activationLink = uuid.v4(); // vydg233-sgddhd-1234dbdb-sa-asf
// зберігаємо користувача в базу даних
const user = await UserModel.create({email, password: hashPassword, activationLink})
// відправляємо користувачеви емейл підтвердження
await mailService.sendActivationMail(email, `${process.env.API_URL}/api/activate/${activationLink}`);
const userDto = new UserDto(user); // id, email, isActivated
// генеруємо токени
const tokens = tokenService.generateTokens({...userDto});
// зберігаємо токени в базі даних
await tokenService.saveToken(userDto.id, tokens.refreshToken);
return {...tokens, user: userDto}
}
async activate(activationLink) {
const user = await UserModel.findOne({activationLink})
if (!user) {
throw new Error('Incorrect activation link')
}
user.isActivated = true;
await user.save();
}
}
module.exports = new UserService();
型
- 用户控制器.js*
const userService = require('../service/user-service');
class UserController {
async registration(req, res, next) {
try {
const {email, password} =req.body;
const userData = await userService.registration(email, password);
res.cookie('refreshToken', userData.refreshToken, {maxAge: 30 * 24 * 60 * 60 * 1000, httpOnly: true})
return res.json(userData);
} catch (e) {
console.log(e);
}
}
async login(req, res, next) {
try {
} catch (e) {
}
}
async logout(req, res, next) {
try {
} catch (e) {
}
}
async activate(req, res, next) {
try {
const activationLink = req.params.link;
await userService.activate(activationLink);
return res.redirect(process.env.CLIENT_URL);
} catch (e) {
console.log(e);
}
}
async refresh(req, res, next) {
try {
} catch (e) {
}
}
async getUsers(req, res, next) {
try {
res.json(['123', '456']);
} catch (e) {
}
}
}
module.exports = new UserController();
型
- 邮件服务.js*
const nodemailer = require('nodemailer');
class MailService {
constructor() {
this.transporter = nodemailer.createTransport({
host: process.env.SMTP_HOST,
port: process.env.SMTP_PORT,
secure: false,
auth: {
user: process.env.SMTP_USER,
pass: process.env.SMTP_PASSWORD
}
})
}
async sendActivationMail(to, link) {
await this.transporter.sendMail({
from: process.env.SMTP_USER,
to,
subject: 'Activation account on' + process.env.API_URL,
text: '',
html:
`
<div>
<h1>Для активації вашого акаунту перейдіть за посиланням!</h1>
<a href="${link}">${link}</a>
</div>
`
})
}
}
module.exports = new MailService();
型
我试图更改CLIENT_URL,但由于某种原因,此链接打开了一个链接
1条答案
按热度按时间btxsgosb1#
从你的注解中显示的
UserModel
判断,我认为你的代码中可能有一个错别字。在
UserModel
中,您声明了activationlink
字段,而在代码中,您使用的是大写的“L”{activationLink}
。请尝试使用此字段的正确名称。