Laravel API跨域访问的实现步骤

2020-08-13 20:11:32
本篇文章给大家带来的内容是关于Laravel API跨域访问的实现步骤,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

服务器A请求服务器B的接口,那么一般会出现跨域问题。

XMLHttpRequest cannot load http://api.console.vms3.com/api/user. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' istherefore not allowed access.

意思就是服务器响应不允许跨域访问.

那我们就需要让服务器支持跨域访问, 也就是在响应头部中添加

'Access-Control-Allow-Origin: *'

第一步: 创建中间件

创建 `app/Http/Middleware/AccessControlAllowOrigin.php` middleware 把 'Access-Control-Allow-Origin: *' 写入头部.app/Http/Middleware/AccessControlAllowOrigin.php<?phpnamespace AppHttpMiddleware;use Closure;use IlluminateSupportFacadesAuth;class AccessControlAllowOrigin{    /**     *     * Handle an incoming request.     *     * @param  IlluminateHttpRequest  $request     * @param  Closure  $next     * @return mixed     */    public function handle($request, Closure $next)    {        header('Access-Control-Allow-Origin: *');        header("Access-Control-Allow-Credentials: true");        header("Access-Control-Allow-Methods: *");        header("Access-Control-Allow-Headers: Content-Type,Access-Token");        header("Access-Control-Expose-Headers: *");        return $next($request);    }}

第二步: 注册路由

注册这个 middlewarekernel 中.
分别在 protected $middleware 数组中和 protected $routeMiddleware 数组中
添加我们刚才创建的那个文件class名, 使用 cors 这个别名.

第三步: 设置中间件保护接口

然后在设置它保护 api , 就是$middlewareGroups['api'] 的数组中添加它的别名, 本文中是 'cors'
app/Http/Kernel.php

<?phpnamespace AppHttp;use IlluminateFoundationHttpKernel as HttpKernel;class Kernel extends HttpKernel{    /**     * The application's global HTTP middleware stack.     *     * These middleware are run during every request to your application.     *     * @var array     */    protected $middleware = [        IlluminateFoundationHttpMiddlewareCheckForMaintenanceMode::class,        IlluminateFoundationHttpMiddlewareValidatePostSize::class,        AppHttpMiddlewareTrimStrings::class,        IlluminateFoundationHttpMiddlewareConvertEmptyStringsToNull::class,        AppHttpMiddlewareAccessControlAllowOrigin::class,    ];    /**     * The application's route middleware groups.     *     * @var array     */    protected $middlewareGroups = [        'web' => [            AppHttpMiddlewareEncryptCookies::class,            IlluminateCookieMiddlewareAddQueuedCookiesToResponse::class,            IlluminateSessionMiddlewareStartSession::class,            // IlluminateSessionMiddlewareAuthenticateSession::class,            IlluminateViewMiddlewareShareErrorsFromSession::class,            AppHttpMiddlewareVerifyCsrfToken::class,            IlluminateRoutingMiddlewareSubstituteBindings::class,        ],        'api' => [            'throttle:60,1',            'bindings',            'cors'        ],    ];    /**     * The application's route middleware.     *     * These middleware may be assigned to groups or used inpidually.     *     * @var array     */    protected $routeMiddleware = [        'auth' => IlluminateAuthMiddlewareAuthenticate::class,        'auth.basic' => IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class,        'bindings' => IlluminateRoutingMiddlewareSubstituteBindings::class,        'can' => IlluminateAuthMiddlewareAuthorize::class,        'guest' => AppHttpMiddlewareRedirectIfAuthenticated::class,        'throttle' => IlluminateRoutingMiddlewareThrottleRequests::class,        'cors' => AppHttpMiddlewareAccessControlAllowOrigin::class,    ];}

第四步:在路由中添加路由

Route::middleware('cors')->group(function () {    //});