web-dev-qa-db-de.com

Get Header Authorization Key in laravel controller?

Der Versuch, den Header-Autorisierungsschlüssel im Controller abzurufen, um ein API zu erstellen. Anfrage wird gestellt von Geiger.

$headers = Apache_request_headers();

Und das $ header enthält ein Array.

Array
(
    [User-Agent] => Fiddler
    [Host] => localhost:8000
    [Content-Length] => 102
    [Authorization] => TestKey
)

Wenn ich auf diese Weise versuche, das Authorization abzurufen, wird ein Fehler ausgegeben.

$header['Authorization]

Fehler:

Undefined index: Authorization

Versucht viele Möglichkeiten, um die Autorisierung zu erhalten, aber nichts zu arbeiten. Gibt es eine Möglichkeit, dies abzurufen?

25
Sunil

Um Header aus der Anfrage zu erhalten, sollten Sie die Request-Klasse verwenden

public function yourControllerFunction(\Illuminate\Http\Request $request)
{
    $header = $request->header('Authorization');

    // do some stuff
}

https://laravel.com/api/5.0/Illuminate/Http/Request.html#method_header

56
Szenis

Obwohl es ein altes Thema ist, könnte es für jemanden nützlich sein ...
In neuen Laravel) -Versionen ist es möglich, das Inhaberautorisierungstoken direkt durch Aufrufen der bearerToken() -Methode von Illuminate\Http\Request Abzurufen:

Auth::viaRequest('costom-token', function (Request $request) {
    $token = $request->bearerToken();
    // ...
});

Oder direkt von einem Controller:

public function index(Request $request) {
    Log::info($request->bearerToken());
    // ...
}
10
Footniko

Sie können versuchen, das JWT (JSON-Web-Token-Authentifizierung für Laravel & Lumen) http://jwt-auth.com über Composer zu installieren.

Erstellen Sie eine Middleware, die überprüft, ob Ihr Token-Schlüssel in der Header-Anforderung vorhanden ist.

Nach der Installation von JWT, Ihre Middleware könnte es wie folgt sein

<?php

namespace App\Http\Middleware;

use Closure;
use JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;
use Tymon\JWTAuth\Exceptions\TokenExpiredException;
use Tymon\JWTAuth\Exceptions\TokenInvalidException;

class VerifyJWTToken
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        try {
            $user = JWTAuth::toUser($request->header('token'));

        } catch (JWTException $e) {
            if ($e instanceof TokenExpiredException) {
                return response()->json([
                    'error' => 'token_expired',
                    'code' => $e->getStatusCode()
                ], $e->getStatusCode());
            } 
            else if($e instanceof TokenInvalidException){
                return response()->json([
                    'error' => "token_invalid",
                    'code' => $e->getStatusCode()
                ], $e->getStatusCode());
            } 
            else {
                return response()->json([
                    'error' => 'Token is required',
                    'code' => $e->getStatusCode(),

                ], $e->getStatusCode());
            }
        }

        return $next($request);
    }
}

Ich habe Token zum Beispiel für einen Headerschlüssel verwendet, aber Sie können es benennen, wie Sie möchten.

Dann können Sie dies auf jedem Controller verwenden

0
Ivan Fretes