【问题标题】:TypeError: Cannot read properties of undefined (reading 'access_token')类型错误:无法读取未定义的属性(读取 \'access_token\')
【发布时间】:2022-12-21 00:48:30
【问题描述】:

类型错误:无法读取未定义的属性(读取“access_token”)

在 verifyToken (E:\E-SHOP\backend\utilities\verifyToken.js:7:29)

这是用于身份验证的 VRIFY 令牌

const jwt = require("jsonwebtoken")
let SECRET_KEY = "90812093128309128"

const verifyToken = (req, res, next) => {
  const token = req.cookies.access_token;
  if (!token) {
    return res.status(400).send("TOKEN not found")
  }

  try {

    jwt.verify(token, SECRET_KEY, (error, user) => {
      if (error) {
        return res.status(401).send("You are not unauthorized")
      }
      req.user = user
      next()
    })


  } catch (error) {
    res.status(500).json({ status: "server error", message: error.message })

  }
}



THIS IS FROM CONTROLLER 和 THIS is controller to update the user




const updateUser = async (req, res, next) => {
    try {
        let find = await User.findById(req.params.id)
        if (!find) {
            return req.status(400).send("User not found")
        }

        let updateUser = await User.findByIdAndUpdate(req.params.id,
            { $set: req.body },
            { new: true })
        res.status(200).json(updateUser)
    } catch (error) {
        res.status(500).json({ status: "server error", message: error.message })

    }}

这是更新路线

const express=require("express")
const router=express.Router()
const {updateUser,deleteUser,getoneUser,allUsers}=require("../controllers/users")
const {verifyToken,verifyUser,verifyAdmin}=require("../utilities/verifyToken")

router.put("/udpateuser/:id",verifyUser,updateUser )  ----> Main one


这是注册和登录控制器


const cookie = require('cookie-parser')
const express = require("express");
let SECRET_KEY = "90812093128309128"

const User = require("../models/user");
const { validationResult } = require('express-validator');
const bcryptjs = require("bcryptjs")
const jwt = require("jsonwebtoken")


const register = async (req, res, next) => {
  // Finds the validation errors in this request and wraps them in an object with handy functions
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return res.status(400).json({ errors: errors.array() });
  }
  const { password, email } = User
  try {
    let user = await User.findOne({ email: email })

    if (user) {
      return res.status(409).send("Email already exists")
    }

    let salt = await bcryptjs.genSalt(10)
    let hashedPassword = await bcryptjs.hashSync(req.body.password, salt)

    newUser = await User.create({
      username: req.body.username,
      email: req.body.email,
      // password:req.body.password
      password: hashedPassword,
    })
    res.status(200).json({ status: "User is created", newUser })

  } catch (error) {
    res.status(500).json({ status: "server error", message: error.message })
  }



}


const login = async (req, res, next) => {
  // Finds the validation errors in this request and wraps them in an object with handy functions
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return res.status(400).json({ errors: errors.array() });
  }
  const { password, email } = req.body

  try {
    let user = await User.findOne({ email });
    if (!user) {
      success = false
      return res.status(400).json({ error: "Please try to login with correct credentials" });
    }
    let comparePassword = await bcryptjs.compare(password, user.password)
    if (!comparePassword) {
      return res.status(400).json("incorrect login credentials")
    }

    let data = {
      user: {
        id: user.id
      }
    }
    let token = await jwt.sign({ data, isAdmin: user.isAdmin }, SECRET_KEY)
    res.cookie("access_token", token, {
      httpOnly: true
    }).status(200).json({ user, token })

  } catch (error) {
    res.status(500).json({ status: "server error", message: error.message })
  }
}
module.exports = { register, login }

这是登录和注册路径

const express=require("express");
const router = express.Router();
const { body } = require('express-validator');
const { register ,login} = require("../controllers/auth");

// REGISTRATION  ROUTE

router.post("/register",[
// username must be an email
body('username',"Username must contain at least 5 characters").isLength({ min: 5 }),
body('email',"Email is not valid").isEmail(),
// password must be at least 5 chars long
body('password',"password must contain at least 5 characters").isLength({ min: 5 }),
],register)



/// LOGIN ROUTE

router.post("/login",[

    body('email',"Email is not valid").isEmail(),
    body('password',"password must contain at least 5 characters").isLength({ min: 5 }),
 ],login)
    
module.exports=router


【问题讨论】:

  • 如果 access_token 在 cookie 中发送,首先检查客户端登录响应。如果请求中发送了 cookie,则检查客户端的其他请求。

标签: node.js reactjs mern


【解决方案1】:

也许首先尝试 console.log(req.cookies) 检查是否有任何 cookie 被传递。如果是这样试试console.log(token),如果得到结果,可能是你的jwt secret有问题,否则可能是你一开始就漏了cookie。

【讨论】:

    【解决方案2】:

    可能是您没有安装 cookie-parser。不是说这绝对是错误,但你可以

    【讨论】:

      猜你喜欢
      • 2018-04-29
      • 2022-12-08
      • 2022-12-01
      • 2022-12-24
      • 2022-12-25
      • 2023-01-21
      • 2023-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多