2017-10-12 1 views
0

La réponse par défaut de Laravel Passport est comme ceci:Réponse jeton personnalisé dans Laravel Passeport

{ 
    "token_type": "Bearer", 
    "expires_in": 31536000, 
    "access_token": djabjkdakadbakdkakjdbjkba 
} 

je dois ajouter une réponse personnalisée comme:

{ 
    "success":"true", 
    "message":"Login Successful", 
    "status":"200", 
    "data":{ 
    "access_token":djabjkdakadbakdkakjdbjkba 
} 

quelqu'un peut me aider à cette idée?

+0

Avez-vous recherché "réponses Laravel personnalisées" sur le web? Qu'en est-il de ces ressources qui ne s'appliquent pas à vous? Qu'avez-vous essayé? – jdv

Répondre

0

Je me suis cogné la tête pendant des heures jusqu'à ce que je trouve la solution. Cela fonctionne actuellement ma version de Laravel 05/05/33:

  1. Ajouter un nouvel itinéraire dans votre api.php fichier.

    Route::post('oauth/token', '[email protected]'); 
    
  2. Créer un nouveau fichier dans YourProject/app/Http/Contrôleurs/AccessTokenController.php

    <?php 
    namespace App\Http\Controllers; 
    
    use App\User; 
    use Exception; 
    use Illuminate\Database\Eloquent\ModelNotFoundException; 
    use League\OAuth2\Server\Exception\OAuthServerException; 
    use Psr\Http\Message\ServerRequestInterface; 
    use Response; 
    use \Laravel\Passport\Http\Controllers\AccessTokenController as 
    ATC; 
    
    class AccessTokenController extends ATC 
    { 
        public function issueToken(ServerRequestInterface $request) 
        { 
         try { 
          //get username (default is :email) 
          $username = $request->getParsedBody()['username']; 
    
          //get user 
          //change to 'email' if you want 
          $user = User::where('username', '=', $username)->first(); 
    
          //generate token 
          $tokenResponse = parent::issueToken($request); 
    
          //convert response to json string 
          $content = $tokenResponse->getContent(); 
    
          //convert json to array 
          $data = json_decode($content, true); 
    
          if(isset($data["error"])) 
           throw new OAuthServerException('The user credentials were incorrect.', 6, 'invalid_credentials', 401); 
    
          //add access token to user 
          $user = collect($user); 
          $user->put('access_token', $data['access_token']); 
    
          return Response::json(array($user)); 
         } 
         catch (ModelNotFoundException $e) { // email notfound 
          //return error message 
          return response(["message" => "User not found"], 500); 
         } 
         catch (OAuthServerException $e) { //password not correct..token not granted 
          //return error message 
          return response(["message" => "The user credentials were incorrect.', 6, 'invalid_credentials"], 500); 
         } 
         catch (Exception $e) { 
          ////return error message 
          return response(["message" => "Internal server error"], 500); 
         } 
        } 
    } 
    
  3. Fait! vous pouvez personnaliser ce que vous voulez ici, avec toutes les conditions que vous avez. C'était une approche paresseuse pour ne pas faire votre propre PassportServiceProvider. Crédits aller à: nauvalazharhttps://gist.github.com/messi89/489473c053e3ea8d9e034b0032effb1d