Javascript 创建React应用程序&x2B;Express.js+;Passport.js登录问题
因此,我尝试在后端使用createreact应用程序和Express.js。我在不同的端口上运行这两个端口-前端在3000,后端在3001。我使用本地Passport策略登录系统。登录系统工作正常。在前端,我有一个register/login表单,它向localhost:3001/register(或login)发送post请求,并成功地注册/登录用户。然后,我在后端有另一个路由,它应该返回当前登录用户的数据(如果有登录用户),或者返回带有“未验证”消息的对象 现在,在客户端,我想根据这个请求的响应修改导航栏。例如,如果用户已登录,我希望有一个包含注销按钮的导航栏;如果用户未登录,我希望有一个包含登录和注册按钮的导航栏。因此,在React组件中,我有以下相关代码:Javascript 创建React应用程序&x2B;Express.js+;Passport.js登录问题,javascript,node.js,reactjs,express,create-react-app,Javascript,Node.js,Reactjs,Express,Create React App,因此,我尝试在后端使用createreact应用程序和Express.js。我在不同的端口上运行这两个端口-前端在3000,后端在3001。我使用本地Passport策略登录系统。登录系统工作正常。在前端,我有一个register/login表单,它向localhost:3001/register(或login)发送post请求,并成功地注册/登录用户。然后,我在后端有另一个路由,它应该返回当前登录用户的数据(如果有登录用户),或者返回带有“未验证”消息的对象 现在,在客户端,我想根据这个请求的
componentDidMount() {
fetch('localhost:3001/loggedUserInfo')
.then(res => console.log(res.json()));
}
这应该会更改组件的状态,但它会将响应记录到控制台,只是为了测试。每一次,即使用户登录,它都会返回“notauthenticated”对象。就像用户从未登录一样
但是,另一方面,如果我在浏览器中转到localhost:3001/loggedUserInfo,在用户登录后,我确实会得到预期的结果。它返回我需要的用户信息
这一直困扰着我,我似乎不明白为什么会发生这种情况。我需要客户端的数据
如果有人想查看我的app.js文件,以下是相关代码(按顺序),我想我在其中包括了所有需要的内容:
var cookieParser = require('cookie-parser');
var session = require('express-session');
var bodyParser = require('body-parser');
var cors = require('cors');
app.use(cors());
app.use(session({
secret: 'secretKey',
resave: false,
saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
扩大我的评论:
问题是您没有在该获取中发送cookie。所以
您的后端永远不会获得cookie,而对于后端,您也不会
登录。当您直接访问url时,它工作的原因是
浏览器确实会发送它(如果你尝试使用postman,你会看到它会发送)
(工作)
请看这里标题为:通过获取请求发送凭据的部分
fetch(url, {
credentials: 'include'
})
确实要重新渲染组件吗?我不确定,但可能是您的组件只渲染了一次,因此当用户未登录时,您会返回第一个“res”。inIt可能是您的应用程序中的一个问题。post(“登录”)。我们能看看吗?
fetch(url, {
credentials: 'include'
})