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()
        );
    }
}
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 2

高级用法

5年前 评论

很赞,需要先运行

php artisan passport:install
4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!