Problema de roteamento com Laravel, AngularJS e CORS
Eu tenho procurado em toda parte por uma solução para este problema.
Eu tenho um aplicativo da web AngularJS com uma implementação de back-end do Laravel 4 da seguinte maneira:
http://app.mydomain.io/ = AngularJS web app
http://api.mydomain.io/ = Laravel Back-end
Dentro do arquivo routes.php no Laravel, tenho o seguinte código PHP para definir os cabeçalhos de controle de acesso:
header('Access-Control-Allow-Origin: http://app.mydomain.io');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE');
Também tenho uma configuração de rota para uma solicitação de login da seguinte maneira:
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!";
}
});
No AngularJS, tenho um AuthService que se parece com abaixo:
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;
}
};
}]);
Quando essa solicitação é feita, obtenho o seguinte:
XMLHttpRequest cannot load http://api.mydomain.io/login. Invalid HTTP status code 404
Se eu alterar a rota do Laravel e o serviço AngularJS para usar o GET, tudo funcionará conforme o esperado. O problema decorre de AngularJS .save () fazer uma solicitação OPTIONS em vez de POST (não entendo completamente o porquê).
Alguém poderia me ajudar com a solução adequada e com as melhores práticas?
Obrigado!