2017-01-03 3 views
0

Ich baue eine API für mobile Anwendung mit Password Grant Tokens. Wenn ein Benutzer versucht, sich bei der Anwendung anzumelden, sendet der Client eine Anforderung für das Zugriffstoken.Laravel Passport: Zusätzliche Modellbedingungen beim Senden von Token Request

Es ist möglich, dass der Benutzer sein Konto nicht über den Link bestätigt hat, der an seine E-Mail gesendet wurde. Ich möchte der Abfrage eine zusätzliche Bedingung hinzufügen und entsprechend eine Fehlerreaktion bereitstellen. Derzeit, da Passport den Tokenteil verwaltet, kann ich das nicht direkt tun.

Wie kann das gelöst werden? Wie kann ich in die Token-Anfrage eintauchen und eine benutzerdefinierte Antwort senden, wenn es Probleme mit dem Benutzerkonto gibt? Und senden Sie Token andernfalls weiter.

+0

Wenn meine Antwort Ihnen geholfen hat, dann bitte als vereinbart markieren, um diesen Thread zu beenden. Vielen Dank. – Learner

Antwort

3

Antwort von einem Laravel Profi hilft:

machen Sie Ihre eigene oauth/Token Route und steckt es in einer oauth.php Datei in/Routen:

Route::post('/oauth/token', [ 
    'uses' => 'Auth\[email protected]' 
]); 

Machen Sie eine CustomAccessTokenController.php

<?php 

namespace App\Http\Controllers\Auth; 

use Psr\Http\Message\ServerRequestInterface; 
use Laravel\Passport\Http\Controllers\AccessTokenController; 

class CustomAccessTokenController extends AccessTokenController 
{ 
    /** 
    * Hooks in before the AccessTokenController issues a token 
    * 
    * 
    * @param ServerRequestInterface $request 
    * @return mixed 
    */ 
    public function issueUserToken(ServerRequestInterface $request) 
    { 
     $httpRequest = request(); 

     // 1. 
     if ($httpRequest->grant_type == 'password') { 
      // 2. 
      $user = \App\User::where('email', $httpRequest->username)->first(); 

      // Perform your validation here 

      // If the validation is successfull: 
      return $this->issueToken($request); 
     } 
    } 
} 

Ref link - https://github.com/laravel/passport/issues/225#issuecomment-271057428

3

Fügen Sie eine Middleware hinzu, bevor Sie Eingabedaten an Ihren Authentifizierungsdienstanbieter senden, und prüfen Sie, ob die E-Mail-Adresse für Ihre Datenbank eingeht. Wenn die E-Mail-Adresse verifiziert wurde, setzen Sie die Anfrage fort, indem Sie sie an den Auth-Dienstanbieter senden, andernfalls geben Sie eine Fehlerantwort mit der gewünschten benutzerdefinierten Nachricht zurück.

Ich sehe Leute sind immer noch auf der Suche nach dieser Antwort und kommen auf dieser Seite. Definieren Sie Ihre eigenen oauth/Token Route möglicherweise ein Weg, aber es ist logischer, wenn Sie Middleware verwenden, die für diesen Zweck vorgenommen werden, Änderungen vor dem Senden von Daten an den Controller zu tun.

Machen Sie eine Middleware: php artisan make:middleware MyMiddleware

Middleware in Kernel registrieren und es vor Ihrer Authentifizierung Middleware machen

protected $routeMiddleware = [ 
     'auth' => \Illuminate\Auth\Middleware\Authenticate::class,//auth middleare 
     'your_middleware_identifier'=>\App\Http\Middleware\MyMiddleware::class, 
    ]; 


    /** 
    * The application's middleware priority array. 
    * 
    * These middlewares will be executed in way they are listed. 
    * 
    * @var array 
    */ 
    protected $middlewarePriority = [ 
     \App\Http\Middleware\MyMiddleware::class, 
     \Illuminate\Auth\Middleware\Authenticate::class, 
    ]; 

Schließlich können Sie Ihre Middleware in AuthServiceProvider.php Datei verwenden, in denen Sie Ihre Passrouten sind: in boot() Funktion

public function boot(Request $request) 
    { 
     $this->registerPolicies(); 

     Route::group(['middleware' => 'your_middleware_identifier'], function() { 
      Passport::routes(); 
     }); 
    } 

Ich hoffe, es

Verwandte Themen