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

时间:2015-07-02 16:28:39

标签: ajax authentication sails.js passport.js passport-local

连续发出数据请求

TL; DR

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

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

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

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

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

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

修改 我的前端在另一个域上 - 当我的用户界面在localhost:1337上运行时,Sails会在localhost:8100上运行。

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

module.exports.cors = {

  allRoutes: true,

  origin: '*',

  credentials: true,

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

  // headers: 'content-type'

};

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

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

1 个答案:

答案 0 :(得分:5)

默认情况下,如果您的前端应用程序的来源与后端应用程序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请求。