Laravel 5.2 CORS, GET ne fonctionne pas avec OPTIONS de contrôle en amont
La redoutable de la SCRO Erreur:
De la croix-Origine de la Demande Bloqué: de La Même Origine que la Politique n'autorise pas la lecture
la ressource distante à http://localhost/mysite/api/test. (Raison: de la SCRO
l'en-tête "Access-Control-Allow-Origin" disparus).
Laravel route:
$router->group(['prefix' => 'api', 'middleware' => 'cors'], function ($router) {
$router->get('/test', 'MyController@myMethod');
});
Laravel De La Scro Middlware:
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::make('OK', 200, $headers);
}
$response = $next($request);
foreach ($headers as $key => $value)
$response->header($key, $value);
return $response;
}
Laravel Noyau:
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'cors' => \App\Http\Middleware\CORS::class
];
Pertinentes .htaccess:
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
Pertinentes Vue.js:
new Vue({
el: '#app',
data: {
//data here
},
http: {
headers: {
"Authorization": "Basic " + "apiKeyHere"
}
},
methods: {
mymethod: function (e)
{
e.preventDefault();
this.$http.get('http://localhost/mysite/api/test').then(
function (response)
{
//do something
}
)
}
}
});
Si je sors de l'en-tête d'Autorisation de l'option de la demande de travaux.
J'ai aussi essayé de https://github.com/barryvdh/laravel-cors mais toujours pas de joie.
Toute aide appréciée!
source d'informationauteur suncoastkid
Vous devez vous connecter pour publier un commentaire.
Clairement pas la solution idéale, mais il FONCTIONNE. J'ai ajouté ce à le haut de mon routes.php fichier:
Il serait bien de le faire fonctionner sans un hack... hélas.
Mise à JOUR: Il s'est avéré être IIS liés. J'ai fini par mettre les en-têtes dans le web.le fichier de configuration et maintenant de la SCRO fonctionne sans le piratage du routes.php fichier.
Si vous souhaitez restreindre l'accès, vous pouvez ajouter des règles de trafic sortant:
- Je résoudre mon problème vient de l'ajout de ces ligne sur mon routes.php Laravel 5.2
Pour plus de 5,2 en routes/web.php
OU registre de la Scro middleware dans HTTP global pile de middleware
Votre middleware est ok, mais vous devez vous inscrire à la Scro middleware dans HTTP global pile de middleware.
Se pose la question de la demande de contrôle en amont, en effet, mais le moyen de la manipulation demande un peu plus d'explication, lorsqu'on parle de Laravel - principalement
OPTIONS
demande est acheminée (quelque chose que les autres réponses plutôt le PHP, Laravel), donc, vous devez l'ajouter à votre parcours pour qu'elle soit réussie:Route::options('/{any}', function(){ return ''; })->where('any', '.*');
Maintenant, nous allons répondre à toutes les autres méthodes - créer de la SCRO middleware:
Et enfin, pour une route donnée, utilisez-le middleware:
Route::put('/test', function(){ echo('test'); })->with('cors');
Vous pouvez contourner cette un sans utilisation d'un middleware comme Barryvdh\Scro pour Laravel qui ne fonctionnait pas correctement avec JWT AUTH , j'ai ajouté les instructions suivantes dans la index.php dans Laravel juste avant que le Noyau de l'instanciation de
d'ajouter celui-ci avant de
cela devrait fonctionner correctement avec JWT AUTH aussi. Veuillez noter que, en Access-Control-Allow-en-tête, vous devez inclure l'Autorisation contraire de votre accesstoken ne seront pas autorisés avec l'Autorisation de l'en-tête donc JWT AUTHENTIFICATION échouera. Heureux De Codage.
Cette réponse est fondée sur cette l'article.
barryvdh/laravel-scro middleware de la bibliothèque, peut être utilisé pour résoudre le problème(Cross-Origin Resource sharing).
étape 1 l'Installer:
étape 2 Libérant vendeur fichiers de la bibliothèque:
étape 3 La commande est exécutée dans l'étape 2 de la copie d'un cors.php fichier de config, qui ressemble à ceci:
Pour
allowedOrigins
la valeur peut être soit['*']
qui a indiqué que l'origine de la demande peut être de n'importe quel domaine, ou à un certain nombre de domaines qui peuvent être les origines qui nous permettra d'envoyer une requête à notreapi
à l'instar de ce['first.com', 'second.com', 'register.third.com']
et aussi
allowedMethods
peut être['*']
ou une liste de permisHTTP verbs
par exemple['POST', 'GET']
étape 4 l'Enregistrement de la scro middleware. Ouvrir
app/Http/kernel.php
et ajouter leHandleCors
classe de$routeMiddleware
comme ceci:étape 5 vous pouvez Maintenant ajouter le
laravel-cors
middleware pour tout itinéraire que vous désirez. Par exemple, dansRoutes/api.php
je vais faire ceci: