Laravel Passport的默认响应如下:
{
"token_type": "Bearer",
"expires_in": 31536000,
"access_token": djabjkdakadbakdkakjdbjkba
}
我需要添加一些自定义响应,例如:
{
"success":"true",
"message":"Login Successful",
"status":"200",
"data":{
"token_type": "Bearer",
"expires_in": 31536000,
"access_token":"djabjkdakadbakdkakjdbjkba"
}
}
有人可以帮我解决这个问题吗?
答案 0 :(得分:6)
我一直在敲头几个小时,直到找到解决方案。这适用于我的Laravel 5.5.33版本:
在 api.php 文件中添加新路线。
Route::post('oauth/token', 'AccessTokenController@issueToken');
在YourProject / app / Http / Controllers / 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']);
//if you need to send out token_type, expires_in and refresh_token in the response body uncomment following lines
// $user->put('token_type', $data['token_type']);
// $user->put('expires_in', $data['expires_in']);
// $user->put('refresh_token', $data['refresh_token']);
return Response::json(array($user));
}
catch (ModelNotFoundException $e) { // email not found
//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);
}
}
}
完成!您可以根据自己的条件自定义您想要的任何内容。这是一种不做自己的PassportServiceProvider的懒惰方法。积分转到: nauvalazhar https://gist.github.com/messi89/489473c053e3ea8d9e034b0032effb1d