password 全自动获得 jwt Token
利用 Closure::bind
namespace App\Traits;
use Laravel\Passport\Bridge\Client;
use Laravel\Passport\Bridge\PersonalAccessGrant;
use Laravel\Passport\Bridge\RefreshTokenRepository;
use Laravel\Passport\ClientRepository;
use Laravel\Passport\Passport;
use League\OAuth2\Server\AuthorizationServer;
use Zend\Diactoros\Response;
trait PassportToken
{
public function index()
{
$user = \Auth::user();
$personalClient = app(ClientRepository::class)->personalAccessClient();
$client = new Client($personalClient->id, $personalClient->name, $personalClient->redirect);
$accessTokenTTL = Passport::personalAccessTokensExpireIn();
$server = app(AuthorizationServer::class);
$result = (function () {
$grant = $this->enabledGrantTypes['personal_access'];
$grant->setRefreshTokenRepository(app(RefreshTokenRepository::class));
$grant->setRefreshTokenTTL(Passport::refreshTokensExpireIn());
$bearerTokenResponse = $this->getResponseType();
return [$grant, $bearerTokenResponse];
})->bindTo($server, AuthorizationServer::class)();
list($personalGrant, $response) = $result;
$accessToken = (function ($accessTokenTTL, $client, $userId) {
return $this->issueAccessToken($accessTokenTTL, $client, $userId);
})->bindTo($personalGrant, PersonalAccessGrant::class)($accessTokenTTL, $client, $user->id);
$refreshToken = (function ($accessToken) {
return $this->issueRefreshToken($accessToken);
})->bindTo($personalGrant, PersonalAccessGrant::class)($accessToken);
$response->setAccessToken($accessToken);
$response->setRefreshToken($refreshToken);
$psrResponse = $response->generateHttpResponse(new Response());
return new \Illuminate\Http\Response(
$psrResponse->getBody(),
$psrResponse->getStatusCode(),
$psrResponse->getHeaders()
);
}
}
高级用法
很赞,需要先运行