【发布时间】: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