Laravel 护照创建令牌和刷新令牌

Posted

技术标签:

【中文标题】Laravel 护照创建令牌和刷新令牌【英文标题】:Laravel passport create token and refresh token 【发布时间】:2019-11-17 23:27:04 【问题描述】:

我在我的项目中使用 Laravel 和护照。 在我的项目中,用户可以通过两种方式获得令牌。 首先用护照确定的用户名和密码。 其次是通过短信发送的验证码,这是我的问题。

我尝试了createToken() 方法,但它会生成一个没有刷新令牌的个人令牌,我需要使用刷新令牌创建令牌并在控制器中指定客户端 ID(无需 HTTP 请求)。

$user = App\User::find(1);
// Creating a token without scopes...
$token = $user->createToken('Token Name')->accessToken;

我该怎么做?

【问题讨论】:

通过laravel.com/docs/5.8/passport#refreshing-tokens。这会有所帮助。 您似乎没有完全阅读我的问题。我还有一个问题。请阅读粗体部分。 您使用的是password 授权类型吗? 【参考方案1】:

创建一个扩展\Laravel\Passport\Http\Controllers\AccessTokenController的新控制器AccessTokenController

<?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;

class AccessTokenController extends \Laravel\Passport\Http\Controllers\AccessTokenController

    public function issueToken(ServerRequestInterface $request)
    
        try 
            //get username (default is :email)
            $username = $request->getParsedBody()['username'];

            //get user
            $user = User::where('email', '=', $username)->firstOrFail();

            //issuetoken
            $tokenResponse = parent::issueToken($request);

            //convert response to json string
            $content = $tokenResponse->getBody()->__toString();

            //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']);
            $user->put('expires_in', $data['expires_in']);
            $user->put('refresh_token', $data['refresh_token']);

            return Response::json(array($user));
        
        catch (ModelNotFoundException $e)  // email notfound
            //return error message
        
        catch (OAuthServerException $e)  //password not correct..token not granted
            //return error message
        
        catch (Exception $e) 
            ////return error message
        
    


您可以使用以下命令生成client_id

php artisan passport:client

【讨论】:

【参考方案2】:

我找到了一个包,我正在使用它 https://github.com/qiutuleng/laravel-passport-phone-verification-code-grant

很好。

【讨论】:

以上是关于Laravel 护照创建令牌和刷新令牌的主要内容,如果未能解决你的问题,请参考以下文章

在护照 laravel 中刷新令牌时出现 TokenMismatchException

用于生成的 Laravel 护照令牌

我应该在laravel护照刷新令牌上放什么?

Laravel 护照延长访问令牌过期时间

Laravel 护照授权令牌在生成新令牌时过期

护照密码授予令牌刷新