NodeJS | SailsJS | PassportJS AJAX身份验证:对数据进行连续请求

Cod*_*ody 3 authentication ajax sails.js passport-local passport.js

连续请求数据

TL; DR

身份验证后,我无法从我的应用程序的前端请求数据 - 但只能通过服务器端视图和Postman我可以在登录后进行后续数据请求,或者通过在Postman中对我的用户进行身份验证然后在我的数据请求中进行数据请求应用程序.

首先,我是服务器端的新手.

我有一个SailsJS后端,我正在使用REST.使用LocalStrategy创建和验证用户工作正常 - 实际上,甚至使后续数据请求工作正常 - 但不是通过我的应用程序的AJAX.

我可以使用Postman或服务器端视图来访问数据,例如/list; 在我的应用程序中进行身份验证后发出请求不起作用 - 除非我跳回Postman并登录,然后跳回我的应用程序并重新发送请求.

我注意到set-cookie我的应用程序在第一个身份验证请求和请求之间有所不同/list.

如果有必要,我可以展示一些代码,但这似乎是我在制作经过身份验证的AJAX请求时缺少一个非常高级的基本概念.

编辑: 我的前端在不同的领域-帆上运行localhost:1337,而我的UI上运行localhost:8100.

这是我的/api/config/cors.js样子:

module.exports.cors = {

  allRoutes: true,

  origin: '*',

  credentials: true,

  // methods: 'GET, POST, PUT, DELETE, OPTIONS, HEAD',

  // headers: 'content-type'

};
Run Code Online (Sandbox Code Playgroud)

我在前端使用了角度,随后的请求正在使用withCredentials: true- 我是否需要将此添加到登录请求中?我是否必须在请求中同时发送用户名/电子邮件?

如何在登录后允许我的所有后续数据验证请求?

Ale*_*N-o 5

如果您的前端应用程序具有与后端应用程序不同的源,则AJAX请求默认情况下不会包含会话cookie.

如果你使用jQuery:

$.ajax({
   url: a_cross_domain_url,
   xhrFields: {
      withCredentials: true
   }
});
Run Code Online (Sandbox Code Playgroud)

此选项必须用于所有AJAX请求,因此服务器可以将它们视为属于同一会话.

您还必须配置服务器端以允许CORS请求.

  • 是的,您必须在所有请求中传递会话cookie. (2认同)