-1

我在邮递员中遇到的错误

将 ReactJS 用于前端 NodeJS 用于后端。确认服务器在端口:8080 上工作,但是当它应该生成 JSON 令牌时出现 409 冲突错误。我的终端没有收到任何错误。阅读其他帖子可能与端点有关?我将发布我的代码,看看是否有人对可能导致问题的原因有任何想法。

import bcrypt from 'bcrypt';
import jwt from 'jsonwebtoken';
import { v4 as uuid } from 'uuid';
import { getDbConnection } from '../src/db';
import { sendEmail } from '../src/util/sendEmail';

export const signUpRoute = {
    path: '/api/signup', 
    method: 'post',
    handler: async (req, res) => {
        const { email, password } = req.body;

        // Make sure there's no existing user with that email - no verification yet
        const db = getDbConnection('react-auth-db');
        const user = await db.collection('users').findOne({ email });

        if (user) {
            return res.sendStatus(409); // 409 is the "conflict" error code
        }

        // Generate the salt first
        const salt = uuid();
        const pepper = process.env.PEPPER_STRING;

        // Encrypt the password
        const passwordHash = await bcrypt.hash(salt + password + pepper, 10);

        const verificationString = uuid();
        
        // Store email and password hash in database (i.e. create user) - you'll also want to get the id
        const startingInfo = {
            hairColor: '',
            favoriteFood: '',
            bio: '',
        }

        const result = await db.collection('users').insertOne({
            email,
            isVerified: false,
            verificationString,
            passwordHash,
            salt,
            info: startingInfo,
        });
        const { insertedId } = result;

        try {
            await sendEmail({
                to: email,
                from: 'mdolly01@gmail.com',
                subject: 'Please verify your email',
                text: `
                    Thanks for signing up! To verify your email, you just need to click the link below:
                    http://localhost:3000/verify-email/${verificationString}
                `
            });
        } catch (e) {
            console.log(e);
            throw new Error(e);
        }

        jwt.sign({
            id: insertedId,
            isVerified: false,
            email, // Do NOT send the salt back to the user
            info: startingInfo,
        },
        process.env.JWT_SECRET,
        {
            expiresIn: '2d',
        },
        (err, token) => {
            if (err) {
                return res.status(500).send(err);
            }
            return res.status(200).send({ token });
        });
    },
};
4

0 回答 0