0

我对 AngularJS(不是第 2 版)相当陌生,我有一个单页应用程序,它在站点 X 上调用(POST)一个 PHP 脚本,并显示数据。我正在使用 Angular JS v1.5.7 并且我没有使用其他任何东西(例如引导程序)。

它工作正常。我通过使用 jquery.ajax 向它添加了身份验证,这很好。然后我意识到将 JQuery.ajax() 与 Angular 一起使用可能不是最好的方法,但在尝试删除 .ajax() 调用并将其替换为 $http 时遇到了困难。

我可以从调试器(例如 Chrome)中看到,当我进行身份验证调用时,PHPSESSID cookie 不会发送到服务器。在服务器上进行调试证实了这一点。我看到来自服务器的正确回复,并且包含 cookie。

我处理回复,JavaScript 去获取我的数据....但是我们没有将 PHPSESSID cookie 发送到服务器,所以它失败了。

如果我使用 JQuery ajax() 来发送身份验证 POST(以及所有其他调用的 $http),那没关系,因此它必须与 $http.post 相关以进行身份​​验证。

这是片段:

myAPI.authenticate = function(user, pass) {
   return $http({
       method: "POST",
       url: "authenticate.php",
       withCredentials: true,
       data: "authReq=&userid="+user+"&passwd="+pass,
   })
}

我也试过:

var app=angular.module('myApp.controllers', [])

app.config(['$httpProvider', function($httpProvider) {
    $httpProvider.defaults.withCredentials = true;
}]);

我已经看到很多关于使用 withCredentials: true 的评论,并尝试在请求和配置中设置它,并设置 $httpProvider.default.withCredentials true。其中大部分是关于 CORS,但在这种情况下,请求都是针对同一服务器上完全相同的页面的,因此它与跨源无关。

我错过了什么?它必须与 Angular 框架有关,因为它可以与 JQuery 一起进行身份验证(并且 $http 用于之后检索数据)

谢谢莫纳森

4

0 回答 0