I am working with angular js 1.5 and laravel 5.4.
I have created middleware in laravel for CORS. It looks like below :
public function handle($request, Closure $next)
{
header("Access-Control-Allow-Origin: *");
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-Request-With');
header('Access-Control-Allow-Credentials: true');
if (!$request->isMethod('options')) {
return $next($request);
}
}
Now, in Angular js I have created post request to get Bearer token so it work perfect. I got token in response. Then I have stored it into session and use interceptor to set token in header for all request.
My controller looks like :
app.controller('LoginController',function($scope,$http,$window,$state) {
$scope.vm.login = function() {
$http({
method: 'POST',
url: apiUrl+'auth/token',
data: $.param($scope.vm.logDetails),
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).then(function(response) {
if(response.data.access_token) {
$window.sessionStorage.setItem('userInfo-token', response.data.access_token);
$state.go('dashboard.masters_userroles');
}
});
}
});
My factory looks like below :
.factory('tokenInjector',function($window){
return {
//For each request the interceptor will set the bearer token header.
request: function($config) {
if($window.sessionStorage.getItem('userInfo-token'))
{
var token=$window.sessionStorage.getItem('userInfo-token');
console.log(token);
//set authorization header
$config.headers['Accept'] = 'application/json'
$config.headers['Authorization'] = 'Bearer '+token;
}
return $config;
}
}
})
.config(function ($httpProvider) {
$httpProvider.interceptors.push('tokenInjector');
})
When it calls $state.go('dashboard.masters_userroles'); this state then it gives an error like
MLHttpRequest cannot load http://api.local.support.com/api/masters/userroles?page=1. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://local.support.com' is therefore not allowed access.