大佬教程收集整理的这篇文章主要介绍了为什么可以在 get 请求中访问 user.id 而不是 post 请求? passport.js 和 mern 堆栈,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
周日快乐
我正在尝试访问后端的 post 请求中的 req.user 属性,因为它返回未定义。
当我运行时它显示完美
app.get('/API/current_user',(req,res) => {
res.send(req.user);
})
但是当我运行下面的路由时,req.user 返回未定义......
app.post('/templates/create',async (req,res) => {
const { template,body } = req.body
const newTemplate = new Template({
template: template,body: body,_user: req.user.ID
})
try {
await newTemplate.save()
return res.status(200).Json({
message: "successfully saved template"
})
} catch (err) {
return console.log(err)
}
});
我似乎无法理解发生了什么?
这是下面的路由文件
const passport = require('passport');
const requireLogin = require('../mIDdlewares/requireLogin')
const cors = require('cors');
const axios = require('axios');
const Template = require('../models/Template');
const corsOptions ={
origin: true,credentials:true,//access-control-allow-credentials:true
optionsuccessstatus:200
}
module.exports = app => {
app.get('/auth/Google',passport.authenticate('Google',{
scope: ['profile','email']
}));
app.get(
'/auth/Google/callBACk',passport.authenticate('Google'),res) => {
res.redirect('/dashboard');
}
);
app.post('/templates/create',_user: req.user.ID
})
try {
await newTemplate.save()
return res.status(200).Json({
message: "successfully saved template"
})
} catch (err) {
return console.log(err)
}
});
app.get('/API/logout',cors(),res) => {
req.logout();
res.redirect('http://localhost:3000');
});
app.get('/API/current_user',res) => {
res.send(req.user);
})
}
因为当使用passport.authenticate时它会将用户序列化为req对象 但是您没有将passport.authenticate 中间件添加到app.post('/templates/create',async (req,res) => { 所以用户它不会序列化为req 并且它将是未定义的。
,您在发帖时要求提供用户 ID,但无法访问该用户 ID。您可以在使用 jwt 或 cookie 登录后创建身份验证承载。这样就可以到达用户id了。
,经过两天的尝试,我解决了这个问题。问题是我的前端没有发送凭据。
这是我最初发送 post 请求的方式,而 req.user 将返回 undefined
当像下面这样执行 axios.post 时,axios 不会自动包含凭据,即使我像这样在逗号之后直接添加了 {Credentials: 'include'} axios.post('http://localhost:5000/template/create',{Credentials: 'include',createTemplatE})
还是坏了
axios.post('http://localhost:5000/template/create',createTemplatE)
.then((responsE) => {
if(response.error) {
setCreateTemplate({...createTemplate,error: response.error})
console.log('this ran')
} else {
setCreateTemplate({...createTemplate,error: '',redirectToRefferrer: truE})
toast.success(`successfully save your template as ${CreateTemplate.templatE}`);
}
})
};
解决方案是像这样更改发布请求
axios({
url:"http://localhost:5000/templates/create",method:"POST",data: createTemplate,withCredentials: true
})
.then((responsE) => {
if(response.error) {
setCreateTemplate({...createTemplate,redirectToRefferrer: truE})
toast.success(`successfully save your template as ${CreateTemplate.templatE}`);
}
})
};
以上是大佬教程为你收集整理的为什么可以在 get 请求中访问 user.id 而不是 post 请求? passport.js 和 mern 堆栈全部内容,希望文章能够帮你解决为什么可以在 get 请求中访问 user.id 而不是 post 请求? passport.js 和 mern 堆栈所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。