【问题标题】:Overload laravel passport grant password access token重载 laravel 护照授予密码访问令牌
【发布时间】:2018-05-14 15:26:47
【问题描述】:

是否可以重载 laravel 护照授权密码令牌有效负载?

我的意图是将一些其他数据嵌入到生成的令牌哈希中,例如用户名、电子邮件等

【问题讨论】:

    标签: laravel token laravel-passport


    【解决方案1】:

    您可以像我在这里所做的那样在控制器中自己生成令牌:

    <?php
    
    namespace MyApp\Http\Controllers\API;
    
    use Illuminate\Http\Request;
    use Laravel\Passport\Http\Controllers\ConvertsPsrResponses;
    use League\OAuth2\Server\AuthorizationServer;
    use MyApp\Http\Controllers\APIController;
    use Illuminate\Auth\AuthenticationException;
    use Zend\Diactoros\ServerRequest;
    use Zend\Diactoros\Response as Psr7Response;
    
    class LoginController extends APIController
    {
    
        use ConvertsPsrResponses;
    
        /**
         *
         * @param Request $request
         * @param AuthorizationServer $authServer
         * @return \Illuminate\Http\JsonResponse
         * @throws AuthenticationException
         * @throws \League\OAuth2\Server\Exception\OAuthServerException
         */
        public function login(Request $request, AuthorizationServer $authServer)
        {
            $token = $this->getPasswordToken($request, $authServer);
            $data = [
                "token_details" => $token,
            ];
    
            return $this->successResponse(
                'Successful Login',
                200,
                $data
            );
    
        }
    
    
        /**
         * @param $request
         * @param AuthorizationServer $authServer
         * @return mixed
         * @throws \League\OAuth2\Server\Exception\OAuthServerException
         */
        private function getPasswordToken($request, AuthorizationServer $authServer)
        {
            $parsedBody = [
                'grant_type' => 'password',
                'client_id' => config('app.client_id'),
                'client_secret' => config('app.client_secret'),
                'username' => $request->username,
                'password' => $request->password,
                'scope' => '',
            ];
    
            $serverRequest = new ServerRequest(
                $request->server(),
                [],
                null,
                $request->method(),
                'php://input',
                $request->header(),
                [],
                [],
                $parsedBody
            );
    
            $response = $this->convertResponse(
                $authServer->respondToAccessTokenRequest($serverRequest, new Psr7Response)
            );
            return json_decode($response->getContent());
        }
    
    }
    

    【讨论】:

      【解决方案2】:

      是的,这是可能的。请看一下这个包

      https://github.com/benbjurstrom/passport-custom-jwt-claims

      【讨论】:

        猜你喜欢
        • 2017-10-05
        • 2017-04-09
        • 2019-08-06
        • 2023-03-27
        • 2017-07-09
        • 2018-02-01
        • 2018-02-25
        • 2021-07-16
        • 2017-07-24
        相关资源
        最近更新 更多