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()
        );
    }
}
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 2

高级用法

5年前 评论

很赞,需要先运行

php artisan passport:install
4年前 评论

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