web-dev-qa-db-fra.com

Laravel obtenir les en-têtes de demande

J'utilise POSTMAN pour envoyer une demande GET dans l'API avec un en-tête contenant une autorisation.

Je sais que l'en-tête de données fonctionne parce que s'il ne le fait pas, la route renvoie une erreur 401. 

Je voulais obtenir l'en-tête Authorization comme ceci:

$access_token = Request::header('Authorization');

Mais remarqué que cela retourne NULL.

J'ai donc essayé d'attraper les valeurs avec:

die(var_dump(Request::header()));

Et remarqué qu'il ne contient aucun en-tête d'autorisation. Il suffit d'héberger des en-têtes de cookie.


mettre à jour

Devrait obtenir Authorization: Bearer ACCESS TOKEN

25
majidarif

Quelle version de POSTMAN avez-vous utilisée?

Si vous êtes sur votre ordinateur local ou sur un serveur géré, certaines sociétés d’hébergement n’autorisent pas l’AUTORISATION EN-TÊTE.

.htaccess modification

 RewriteEngine On
 RewriteCond %{HTTP:Authorization} .
 RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
46
dschniepp

La réponse de dschniepp est juste, mais j'ai aussi des problèmes avec cela. Vous devez faire deux choses:

  1. Vérifiez si mod_rewrite est disponible et activé.
  2. Mettez à jour le fichier .htaccess de Laravel, situé dans le dossier public.

Dans le premier point, vous devez vérifier si le module "mod_rewrite" est disponible via la fonction php_info, dans un fichier php séparé. Ensuite, s'il est disponible, vous devez l'activer, cela dépend de la configuration de votre serveur Web. Dans ma boîte Nitrous, j'ai ajouté ces lignes à mon fichier httpd.conf:

<IfModule mod_rewrite>
   RewriteEngine On
</IfModule>

Ou vous pouvez aussi activer le module dans le fichier .htaccess:

RewriteEngine On

Ensuite, dans le même fichier .htaccess situé dans un dossier public à la racine de l'application laravel, vous devez ajouter les lignes suivantes:

RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

Ces lignes ont fonctionné pour moi. Votre fichier .htaccess devrait ressembler à ceci:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    RewriteCond %{HTTP:Authorization} ^(.*)
    RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

Et voilà, vous devriez avoir l'en-tête Authorization dans le tableau Request :: header (). Juste pour clarifier ceci est un problème avec Apache, pas avec Laravel lui-même.

8
daver

Dans Laravel 5.5, vous pouvez lire les éleveurs en utilisant Apache_request_headers, il vous suffit de le lire dans votre contrôleur à l'aide des lignes suivantes

$headers = Apache_request_headers();
dd($headers['Authorization']);

Assurez-vous que vous avez ajouté utilisez Illuminate\Http\Request; dans votre contrôleur

2
sunshine

Afficher ceci ici car cela a résolu mon problème. Ceci s'applique aux sous-domaines mais peut évidemment être ajusté aux domaines simples. Appliqué cela dans mon fichier de routes en haut.

$newUrl = '';
try{
    $urlParts = parse_url($_SERVER['HTTP_REFERER']) ?? '';
    $newUrl = $urlParts['scheme'] . "://" . $urlParts['Host'];
    if(!stristr($newUrl, '.yourdomain.com')){
        $newUrl = 'false';
    }
}catch(Exception $e)
{}
header('Access-Control-Allow-Origin: ' . $newUrl);
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Headers: access-control-allow-Origin,cache-control,content-type,postman-token');
0
Brandon Korenek