Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何在laravel中处理飞行前请求_Angularjs_Laravel_Ionic Framework_Ionic3_Laravel 5.5 - Fatal编程技术网

Angularjs 如何在laravel中处理飞行前请求

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

我正在使用爱奥尼亚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',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(){});
});