cors - solucionar - origin null is therefore not allowed access laravel
Agregar respuesta de encabezado Access-Control-Allow-Origin en el pasaporte Laravel 5.3 (8)
Cree un archivo A Cors.php en App / Http / Middleware y péguelo en él. ☑
<?php
namespace App/Http/Middleware;
use Closure;
class Cors { public function handle($request, Closure $next)
{
header("Access-Control-Allow-Origin: *");
//ALLOW OPTIONS METHOD
$headers = [
''Access-Control-Allow-Methods'' => ''POST,GET,OPTIONS,PUT,DELETE'',
''Access-Control-Allow-Headers'' => ''Content-Type, X-Auth-Token, Origin, Authorization'',
];
if ($request->getMethod() == "OPTIONS"){
//The client-side application can set only headers allowed in Access-Control-Allow-Headers
return response()->json(''OK'',200,$headers);
}
$response = $next($request);
foreach ($headers as $key => $value) {
$response->header($key, $value);
}
return $response;
} }
Y agregue esta línea en su Kernel.php después de la línea "Trust Proxies :: Class".
/App/Http/Middleware/Cors::class,
Eso es todo lo que ha permitido encabezado de Cors. ☑
Soy nuevo en Laravel y estoy haciendo algún proyecto de pasaporte Laravel 5.3 con la concesión de contraseña OAuth2.0. Cuando rizo la API con los parámetros, responde con token. Sin embargo, en el navegador necesita una seguridad adicional que el punto final debe agregar porque mi solicitud proviene de localhost mientras la API se encuentra en mi VM. Aquí está el error:
No ''Access-Control-Allow-Origin'' header is present on the requested resource. Origin ''http://localhost:8080'' is therefore not allowed access. The response had HTTP status code 400.
Sé cuál es el problema, pero no sé dónde incluir ese encabezado, ya que se trata de una aplicación de terceros.
Gracias de antemano expertos. Por favor ayuda.
La respuesta simple es establecer el encabezado
Access-Control-Allow-Origin
en
localhost
o
*
.
Así es como lo hago habitualmente:
Cree un middleware simple llamado
Cors
:
php artisan make:middleware Cors
Agregue el siguiente código a la
app/Http/Middleware/Cors.php
:
public function handle($request, Closure $next)
{
return $next($request)
->header(''Access-Control-Allow-Origin'', ''*'')
->header(''Access-Control-Allow-Methods'', ''GET, POST, PUT, DELETE, OPTIONS'');
}
Puede reemplazar el
*
con
localhost
o mantenerlo como está.
El siguiente paso es cargar el middleware.
Agregue la siguiente línea a la matriz
$routeMiddleware
en
app/Http/Kernel.php
.
''cors'' => /App/Http/Middleware/Cors::class,
Y el paso final es usar el middleware en las rutas en las que desea establecer los encabezados de origen de acceso.
Suponiendo que está hablando de las nuevas rutas api en laravel 5.3, el lugar para hacerlo es
app/Providers/RouteServiceProvider.php
, dentro de la función
mapApiRoutes()
(puede eliminar o comentar el código anterior de la función):
Route::group([
''middleware'' => [''api'', ''cors''],
''namespace'' => $this->namespace,
''prefix'' => ''api'',
], function ($router) {
//Add you routes here, for example:
Route::apiResource(''/posts'',''PostController'');
});
La respuesta simple es establecer el encabezado Access-Control-Allow-Origin en localhost o *. Así es como lo hago habitualmente:
Agregue el siguiente código a bootstrap / app.php:
header(''Access-Control-Allow-Origin: *'');
header(''Access-Control-Allow-Methods: *'');
header(''Access-Control-Allow-Headers: *'');
Para aquellos que no resolvieron el problema al configurar el middleware de ruta en
App/Http/Kernel
, intente configurar el middleware global.
En
App/Http/Middleware/Cors
:
public function handle($request, Closure $next)
{
return $next($request)->header(''Access-Control-Allow-Origin'', ''*'')
->header(''Access-Control-Allow-Methods'',''GET'', ''POST'', ''PUT'', ''PATCH'', ''DELETE'', ''OPTIONS'')
->header(''Access-Control-Allow-Headers'', ''Content-Type, Authorization'');
}
En
App/Http/Kernel
:
protected $middleware = [
...
/App/Http/Middleware/Cors::class,
];
Simplemente agregue esto a su controlador de código
return response()->json(compact(''token''))->header("Access-Control-Allow-Origin", "*");
También puedes usar el gran paquete laravel-cors de barryvdh .
Una vez que haya instalado el paquete, la forma más fácil de obtener soporte de CORS para todas sus rutas es agregar el middleware como este en Http / Kernel.php:
protected $middleware = [
/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode::class,
/Barryvdh/Cors/HandleCors::class,
];
Si no desea tener soporte CORS en todas sus rutas, debe hacer una nueva ruta de OPCIONES para
/oauth/token
y agregar el middleware cors a esa ruta solamente.
Tenga cuidado, no puede modificar la verificación previa. Además, el navegador (al menos Chrome) elimina el encabezado de "autorización" ... esto resulta en algunos problemas que pueden surgir de acuerdo con el diseño de la ruta. Por ejemplo, una verificación previa nunca ingresará a la hoja de ruta del pasaporte ya que no tiene el encabezado con el token.
En caso de que esté diseñando un archivo con una implementación del método de opciones, debe definir en el archivo de ruta web.php una ruta "trampa" (o más de una) para que el preflght (sin autorización de encabezado) pueda resolver la solicitud y Obtenga los encabezados CORS correspondientes. Como no pueden regresar en un middleware 200 de manera predeterminada, deben agregar los encabezados en la solicitud original.
Simplemente agregue esto a su vista:
<?php header("Access-Control-Allow-Origin: *"); ?>