Angularjs 如何在laravel中处理飞行前请求
我正在使用爱奥尼亚v-3应用程序和laravel 5.5作为后端 我的ionic应用程序中有一个get请求Angularjs 如何在laravel中处理飞行前请求,angularjs,laravel,ionic-framework,ionic3,laravel-5.5,Angularjs,Laravel,Ionic Framework,Ionic3,Laravel 5.5,我正在使用爱奥尼亚v-3应用程序和laravel 5.5作为后端 我的ionic应用程序中有一个get请求 const httpOptions = { headers: new HttpHeaders({ 'Authorization': 'Bearer '+localStorage.getItem('token') }) }; this.prf=this.httpClient.get('http://localhost/blog/public/api/user',httpOp
const httpOptions = {
headers: new HttpHeaders({
'Authorization': 'Bearer '+localStorage.getItem('token')
})
};
this.prf=this.httpClient.get('http://localhost/blog/public/api/user',httpOptions);
它首先发送一个选项
请求,然后在获得成功响应后发送一个GET
请求
现在,我在api.php
文件中使用两个路由作为
//first routing
Route::middleware('cors','auth:api')->get('/user', function (Request $request) {
return $request->user();
});
//second routing
Route::options('user', function(){
return response(200);
})->middleware('cors');
这工作正常
我的请求头包括访问控制请求方法:GET
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Access-Control-Request-Headers: authorization
Access-Control-Request-Method: GET
Connection: keep-alive
Host: localhost
Origin: http://localhost:8100
User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Mobile
Safari/537.36
在这篇文章中,它说
但是,如果请求是由于
如果请求中存在授权
头,您将不会
能够使用上述步骤绕过限制。你呢
除非你能控制,否则你根本无法解决这个问题
正在向其发出请求的服务器
是否有其他方法/最佳实践来处理此问题?我找到了解决方案
创建了一个中间件app/Http/middleware/PreflightResponse.php
<?php
namespace App\Http\Middleware;
use Closure;
class PreflightResponse
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next )
{
if ($request->getMethod() === "OPTIONS") {
return response('');
}
return $next($request);
}
}
但是仍然在我的api.php
中,我必须使用这些代码
Route::middleware('cors','preflight')->group(function () {
Route::options('register', function(){});
Route::options('login', function(){});
Route::options('address', function(){});
Route::options('address/{id}', function(){});
Route::options('getaddress', function(){});
Route::options('getorders', function(){});
Route::options('order', function(){});
Route::options('orderdetails', function(){});
Route::options('user', function(){});
Route::options('profile', function(){});
Route::options('calendar', function(){});
Route::options('calendarapp', function(){});
});
Route::middleware('cors','preflight')->group(function () {
Route::options('register', function(){});
Route::options('login', function(){});
Route::options('address', function(){});
Route::options('address/{id}', function(){});
Route::options('getaddress', function(){});
Route::options('getorders', function(){});
Route::options('order', function(){});
Route::options('orderdetails', function(){});
Route::options('user', function(){});
Route::options('profile', function(){});
Route::options('calendar', function(){});
Route::options('calendarapp', function(){});
});