私は AngularJS (バージョン 2 ではない) を初めて使用し、サイト X で PHP スクリプトを呼び出し (POST)、データを表示するシングル ページ アプリを持っています。私はAngular JS v1.5.7を使用していますが、他には何も使用していません(ブートストラップなど)。
正常に動作しています。jquery.ajax を使用して認証を追加しましたが、問題ありませんでした。その後、Angular で JQuery.ajax() を使用することはおそらく最善の方法ではないことに気付きましたが、.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について話していますが、この場合、リクエストはすべて同じサーバー上のまったく同じページに対するものであるため、クロスオリジンには関係ありません.
私は何が欠けていますか?認証を行うJQuery(および後でデータを取得するために使用される$ http)で問題なく動作するため、Angularフレームワークと関係があるに違いありません
ありがとうモナサン