您可以编写自己的控制器和路由...
Passport 有一个定义的“Laravel\Passport\Http\Controllers\AccessTokenController”,并且有一个名为“issueToken()”的方法。
如果您看到下面的方法,它会调用函数“revokeOtherAccessTokens()”,而这删除或撤销所有“access_tokens”使用“Laravel\Passport\TokenRepository”
所以你可以做的是编写你自己的控制器并防止调用“revokeOtherAccessTokens()”
您必须记住的事实是,访问令牌永远不会被修剪或撤销,至少在刷新令牌已发布或手动删除它们时。
刷新令牌和访问令牌在发出刷新令牌时被撤销,因为方法“respondToAccessTokenRequest()”中的“League\OAuth2\Server\Grant\RefreshTokenGrant”已经撤销了旧的“access_token”和“refresh_token”,所以在这种情况下,我们不必担心撤销或删除它们。
...
// Expire old tokens
$this->accessTokenRepository->revokeAccessToken($oldRefreshToken['access_token_id']);
$this->refreshTokenRepository->revokeRefreshToken($oldRefreshToken['refresh_token_id']);
...
这是一个示例实现,希望对您有所帮助:
路线:
Route::post('oauth/access_token', 'Auth\OAuth2Controller@issueToken');
自定义控制器:
<?php
namespace App\Http\Controllers\Auth;
use Laravel\Passport\Http\Controllers\HandlesOAuthErrors;
use Zend\Diactoros\Response as Psr7Response;
use Psr\Http\Message\ServerRequestInterface;
use League\OAuth2\Server\AuthorizationServer;
use App\Http\Controllers\Controller;
class OAuth2Controller extends Controller
{
use HandlesOAuthErrors;
/**
* The authorization server.
*
* @var AuthorizationServer
*/
protected $server;
/**
* Create a new controller instance.
*
* @param AuthorizationServer $server
* @return void
*/
public function __construct(AuthorizationServer $server)
{
$this->server = $server;
}
/**
* Authorize a client to access the user's account.
*
* @param ServerRequestInterface $request
* @return Response
*/
public function issueToken(ServerRequestInterface $request)
{
return $this->withErrorHandling(function () use ($request) {
return $this->server->respondToAccessTokenRequest($request, new Psr7Response);
});
}
}