2016-12-29 12 views
11

Früher, als ich Laravel 5.2 verwendet habe, habe ich das Paket https://github.com/tymondesigns/jwt-auth/ eines Drittanbieters verwendet, um eine JWT-basierte Authentifizierung zu erstellen. Dort mussten wir einfach den Benutzernamen und das Passwort übergeben, um ein Token zu erhalten.Laravel 5.3 Passport JWT-Authentifizierung

Nun in Laravel 5.3 mit der Einführung des Passes Ich möchte eine JWT-basierte Authentifizierung machen, aber Pass erfordert, dass ich die client_id und client_secret zusammen mit dem Benutzernamen und dem Passwort angeben. was nicht in tymondesigns/jwt-auth.

Wenn ich eine Anfrage ohne client_id machen dann wirft er einen Fehler http://pix.toile-libre.org/upload/original/1482908288.png aber wenn ich die client_id passieren und client_secret dann funktioniert es gut http://pix.toile-libre.org/upload/original/1482908143.png

Wie kann ich eine JWT Anfrage in Laravel 5.3 und Reisepass mit nur machen die Benutzername und Passwort und ohne Angabe von client_id und client_secret.

Antwort

26

So, endlich beantworte ich meine eigene Frage. Hoffentlich hilft das jemandem, der sich dem ähnlichen Problem gegenübersieht.

JWT Authentifizierung kann mit 5,3 Pass Laravel erfolgen, nur die folgenden Schritte folgen:

OR folgenden Schritte in dieser Verbindung beschrieben:

  • Komponist erfordern Laravel/Pass
  • hinzufügen Laravel\Passport\PassportServiceProvider::class, Ihren App-Anbieter
  • php Handwerker
  • php Handwerker Pass migrieren: installieren
  • HasApiTokens Eigenschaft zu Ihrem Benutzermodell
  • Passport :: Routen() hinzufügen; in AppServiceProvider
  • konfigurieren api Treiber Pass

Ist das erledigt, einen Usercontroller erstellen und die folgenden Methoden in es hinzuzufügen:

public function auth(Request $request) 
{ 

    $params = $request->only('email', 'password'); 

    $username = $params['email']; 
    $password = $params['password']; 

    if(\Auth::attempt(['email' => $username, 'password' => $password])){ 
    return \Auth::user()->createToken('my_user', []); 
    } 

    return response()->json(['error' => 'Invalid username or Password']); 
} 

    public function index(Request $request) 
    { 
    return $request->user(); 
    } 

In Routen/api.php, fügen Sie die folgenden Routen:

Route::post('auth', '[email protected]'); 

Route::group(['middleware' => 'auth:api'], function(){ 

    Route::resource('user', '[email protected]'); 

}); 

nun eine POST-Anforderung an http://localhost:8000/auth mit der E-Mail-Adresse und das Passwort machen, wie im Screenshot gezeigt (http://pix.toile-libre.org/upload/original/1483094937.png) Diese erhalten Sie die accessToken, können Sie diese Token verwenden, um andere Anforderungen in der Anwendung mit dem Authorization Header zu machen und Bearer XXX xxx ist die accessToken Sie erhalten von /api/Auth Endpunkt.

Nun eine GET-Anfrage an /api/user mit dem Header Authorization und dem Token-Wert, dies wird die authentifizierten Benutzerdetails zurückgeben. (zB: http://pix.toile-libre.org/upload/original/1483095018.png)

Ich habe auch gepostet diese Schritte auf meinem Blog bei http://chatterjee.pw/larvel-passport-jwt-authentication/

Ich hoffe, das hilft!

+0

Können wir benutzerdefinierte Token machen? nicht vom Objekt des Benutzers –

+2

Vielen Dank für Ihre Freigabe, aber: 1. Es gibt keine refresh_token 2. Ich habe hier keine JWT Mitarbeiter gefunden, es ist nur access_token 3. Ich habe nicht verstanden, warum Sie so viele ausgegeben haben Zeit dafür ist es die "versuch()" Methode von "Auth" und "createToken()" Methode von "HasApiTokens" Merkmal –

+1

Diese Token-Lösung ist ABSOLUT NICHT ein JWT und ist daher keine Antwort auf Ihre ursprüngliche Frage Diese Frage und Antwort ist irreführend für andere Menschen. Ich habe viel Zeit damit verbracht zu denken, dass dies eine JWT-Lösung ist, aufgrund der Fragen und Antworten hier. –