NodeJS 我想确认我的激活链接时出错[关闭]

zpgglvta  于 2023-11-17  发布在  Node.js
关注(0)|答案(1)|浏览(125)

**已关闭。**此问题为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,但由于某种原因,此链接打开了一个链接

btxsgosb

btxsgosb1#

从你的注解中显示的UserModel判断,我认为你的代码中可能有一个错别字。
UserModel中,您声明了activationlink字段,而在代码中,您使用的是大写的“L”{activationLink}
请尝试使用此字段的正确名称。

相关问题