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

NodeJS|SailsJS|PassportJS AJAX Authentication: Making Successive Requests for Data

连续请求数据

TL;DR

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

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

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

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

我确实注意到我的 set-cookie 在我的应用程序中的第一个身份验证请求和 /list 的请求是不同的。

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

编辑: 我的前端 在不同的域上 -- Sails 在 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'

};

我在前端使用 angular,后续请求使用 withCredentials: true -- 我是否也需要将其添加到登录请求中?我还必须在请求中发送 username/email 吗?

如何在登录后允许所有后续数据请求进行身份验证?

如果您的前端应用程序与后端应用程序的来源不同 the AJAX requests will not include the session cookie 默认情况下。

如果你是using jQuery:

$.ajax({
   url: a_cross_domain_url,
   xhrFields: {
      withCredentials: true
   }
});

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

您还必须 configure the server side 允许 CORS 请求。