为什么我在请求获取访问令牌时总是收到 500 Internal Server Error

问题描述 投票:0回答:1

我提供了在正文中创建 jwt 所需的用户名和密码,但我总是收到 500 内部服务器错误,但如果我不提供用户名或密码,我会收到我的错误信息,即请提供电子邮件和密码

const jwt = require("jsonwebtoken");
const { BadRequestError } = require("../errors");

const login = async (req, res) => {
  const { username, password } = req.body;


  if (!username || !password) {
    throw new BadRequestError("Please provide email and password");
  }

  const id = new Date().getDate();

  const token = jwt.sign({ id, username }, process.env.JWT_SECRET, {
    expiresIn: "30d",
  });

  res.status(200).json({ msg: "user created", token });
};

我期待当我发布请求时 http://localhost:5000/api/v1/login 我获得访问权限

node.js jwt access-token express-jwt
1个回答
0
投票

我的登录方法是在Node.js中用TypeScript写的。但你可以用 JavaScript 编写它。 这是我的登录方法:

import express from "express";
import {User} from "../model/user";
import bcrypt from "bcryptjs"
import jwt from "jsonwebtoken";
import {SECRET_JWT} from "../../utility/constant";

export const userRouter = express.Router()

userRouter.post(`/login`, loginUser)

export async function loginUser(req: any, res: any)
{
    let wantedUser = await User.find`enter code here`One({
        email: req.body.email
    })

    if (!wantedUser)
    {
        return res.status(404).json({
            Message: 'Wanted user was not found!'
        })
    }
    else
    {
        if (bcrypt.compareSync(req.body.password, wantedUser['passwordHash']))
        {
            let token = jwt.sign(
                {
                    userId: wantedUser['id'],
                    isAdmin: wantedUser['isAdmin'],
                },
                SECRET_JWT,
                {
                    expiresIn: '1d', // Ite means 1 day. You can use 1w for 1 week!
                    algorithm: 'HS256'
                }
            )
            res.status(200).json({
                user: wantedUser['email'],
                token: token
            })
        }
        else
        {
            res.status(400).json({
                Message: 'Password is wrong!'
            })
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.