我对 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 用于之后检索数据)
谢谢莫纳森