Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 创建React应用程序&x2B;Express.js+;Passport.js登录问题_Javascript_Node.js_Reactjs_Express_Create React App - Fatal编程技术网

Javascript 创建React应用程序&x2B;Express.js+;Passport.js登录问题

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请求,并成功地注册/登录用户。然后,我在后端有另一个路由,它应该返回当前登录用户的数据(如果有登录用户),或者返回带有“未验证”消息的对象 现在,在客户端,我想根据这个请求的

因此,我尝试在后端使用createreact应用程序和Express.js。我在不同的端口上运行这两个端口-前端在3000,后端在3001。我使用本地Passport策略登录系统。登录系统工作正常。在前端,我有一个register/login表单,它向localhost:3001/register(或login)发送post请求,并成功地注册/登录用户。然后,我在后端有另一个路由,它应该返回当前登录用户的数据(如果有登录用户),或者返回带有“未验证”消息的对象

现在,在客户端,我想根据这个请求的响应修改导航栏。例如,如果用户已登录,我希望有一个包含注销按钮的导航栏;如果用户未登录,我希望有一个包含登录和注册按钮的导航栏。因此,在React组件中,我有以下相关代码:

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'  
})