我一直在广泛寻找解决这个问题的方法。
我有一个 AngularJS Web 应用程序,其后端实现为 Laravel 4,如下所示:
http://app.mydomain.io/ = AngularJS web app
http://api.mydomain.io/ = Laravel Back-end
在 Laravel 的 paths.php 文件中,我有以下 PHP 代码来设置访问控制标头:
header('Access-Control-Allow-Origin: http://app.mydomain.io');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE');
我还为登录请求设置了路由,如下所示:
Route::post('/login', function()
{
$email = Input::get('email');
$password = Input::get('password');
if (Auth::attempt(array('email' => $email, 'password' => $password)))
{
return "Success!";
} else {
return "Fail!";
}
});
在 AngularJS 中,我有一个 AuthService,如下所示:
app.factory('AuthService', ['$resource', '$q', '$cookieStore', function($resource, $q, $cookieStore) {
var user = null;
var Service = $resource('//api.mydomain.io/login/', {}, {});
return {
login: function(email, password) {
var deferred = $q.defer();
Service.save({email: email, password: password}, function(response) {
$cookieStore.put('user', JSON.stringify(response));
deferred.resolve(true);
}, function(error) {
deferred.reject(error);
});
return deferred.promise;
}
};
}]);
当提出这个请求时,我得到以下信息:
XMLHttpRequest cannot load http://api.mydomain.io/login. Invalid HTTP status code 404
如果我将 Laravel 路由和 AngularJS 服务更改为使用 GET,一切都会按预期进行。问题源于 AngularJS .save() 发出 OPTIONS 请求而不是 POST (我不完全明白为什么)。
谁能帮助我找到正确且最佳实践的解决方案?
谢谢你!