【问题标题】:Cannot read property 'jwtoken' of undefined无法读取未定义的属性“jwtoken”
【发布时间】:2021-12-02 10:05:18
【问题描述】:

在这里,我在后端以 express 生成令牌 .....

router.post("/login",async(req,res)=>{
    const {email,password}=req.body;
    if(!email || !password){
        return res.status(401).send({error:"please filled the data properly"});
    }
    try {
        const loginUser=await User.findOne({email:email});
        if(!loginUser){
            return res.status(400).send({error:"not found"});
        }
        const isMatch = await bcrypt.compare(password,loginUser.password);    
        if(isMatch){
            const token=await loginUser.generateToken();
            res.cookie("jwtoken",token,{
                expires:new Date(Date.now()+15000000),
                httpOnly:true,
                //secure:true  //it is applicable when we use https method
            })
            console.log(token);
            res.send({message:"login success"});
        }else{
            res.status(400).send({error:"please enter correct data"})
        }
          
    } catch (error) {
        res.status(400).send(error)
    }
})

the token is create when i login in brouser

这是关于页面(反应) ....................

const verifyPage=async()=>{
    try{
        const res=await fetch('/about',{
            method:"GET",
            headers:{
                Accept:"application/json",
                "Content-Type":"application/json"
            },
            credentials:"include"
        });
        const data=await res.json();
        console.log(data);
        
        if(!res.status===200){
            const err=new Error(res.error);
            throw err;
        }
    }catch(err) {
        console.log(err);
        history.push("/login");
    }
}

useEffect(()=>{
    verifyPage();
},[])

......

我在这里验证令牌 ......

router.get("/about",Authentication,(req,res)=>{
res.send(req.rootUser);
})

....... 认证页面 …………

    const jwt = require("jsonwebtoken")
const User=require("../models/shegma")

const Authentication=async (req,res,next)=>{
    try{
        const token=req.cookies.jwtoken;
        console.log(token)
        const verifyToken=jwt.verify(token,process.env.TOKENID);
        console.log(verifyToken);
        const rootUser=await User.findOne({_id:verifyToken._id,"tokens.token":token})
        if(!rootUser){throw new Error("user not found")}
        req.token=token;
        req.rootUser=rootUser;
        req.userID=rootUser._id;
        next();
    }catch(err){
        res.status(401).send("no token found");
        console.log(err);
    }
}
module.exports=Authentication;

.......

这是错误 ......

TypeError:无法读取未定义的属性“jwtoken” 在身份验证 (C:\Users\ASUS\Desktop\mern\server\middleware\Authentication.js:6:33) 在 Layer.handle [as handle_request] (C:\Users\ASUS\Desktop\mern\server\node_modules\express\lib\router\layer.js:95:5) 在下一个(C:\Users\ASUS\Desktop\mern\server\node_modules\express\lib\router\route.js:137:13) 在 Route.dispatch (C:\Users\ASUS\Desktop\mern\server\node_modules\express\lib\router\route.js:112:3) 在 Layer.handle [as handle_request] (C:\Users\ASUS\Desktop\mern\server\node_modules\express\lib\router\layer.js:95:5) 在 C:\Users\ASUS\Desktop\mern\server\node_modules\express\lib\router\index.js:281:22 在 Function.process_params (C:\Users\ASUS\Desktop\mern\server\node_modules\express\lib\router\index.js:335:12) 在下一个(C:\Users\ASUS\Desktop\mern\server\node_modules\express\lib\router\index.js:275:10) 在 Function.handle (C:\Users\ASUS\Desktop\mern\server\node_modules\express\lib\router\index.js:174:3) 在路由器(C:\Users\ASUS\Desktop\mern\server\node_modules\express\lib\router\index.js:47:12)

【问题讨论】:

    标签: mern


    【解决方案1】:

    您是否碰巧在您的 express 代码中的任何位置解析传入请求的 cookie?

    req.cookies 对象是 undefined 让我相信您可能没有解析 cookie 请求,或者在调用 Authentication 处理程序之前没有进行解析。

    供参考:express cookie-parser

    【讨论】:

      【解决方案2】:

      首先,您需要在服务器文件夹中安装 cookie-parser

      npm i cookie-parser
      

      然后,要求 cookie-parser 在您初始化 express 的 .js 文件中放置

      const cookieParser = require('cookie-parser')
      

      在此之后,在const app = express();下面写

      app.use(cookieParser())
      

      这里是完整的代码:-

      const express = require('express');
      const cookieParser = require('cookie-parser')
      
      const app = express();
      
      app.use(cookieParser())
      

      【讨论】:

        猜你喜欢
        • 2021-12-05
        • 1970-01-01
        • 2020-04-06
        • 2020-10-30
        • 2019-10-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多