php - 如何在 Laravel/Passport 中覆盖 `issueToken` 方法
问题描述
我正在尝试覆盖issueToken
位于\Laravel\Passport\Http\Controllers\AccessTokenController
而不添加新路由的方法,即(api/oauth/token)。我已经构建了自己AccessTokenController
的功能,可以执行我想要的功能,但是当我调用时oauth/token
,正在执行父方法而不是我的实现..我是否遗漏了一些东西来完成覆盖?
<?php
namespace App\Http\Controllers;
use phpseclib\Crypt\RSA;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use League\OAuth2\Server\Exception\OAuthServerException;
use Psr\Http\Message\ServerRequestInterface;
use \Laravel\Passport\Http\Controllers\AccessTokenController as ATC;
class AccessTokenController extends ATC {
public function issueToken(ServerRequestInterface $request){
try {
// Fetching username from request
$username = $request->getParseBody()['username'];
// Fetching the User
$user = User::where('email', '=', $username);
// Genereting token
$tokenResponse = parent::issueToken($request);
//convert response to json string
$content = $tokenResponse->getBody()->__toString();
$content['email'] = $user['emial'];
//convert json to array
$data = json_decode($content, true);
return $data;
} catch (OAuthServerException $e) {
return ['Message' => 'The suer credentials were incorrect!'];
}catch (\Exception $e) {
return ['Message' => 'Exception: '.$e];
}
}
}
解决方案
只需覆盖路径app/Providers/AuthServiceProvider.php
就足够了。
确保use Illuminate\Support\Facades\Route;
在文件顶部添加:
public function boot()
{
$this->registerPolicies();
Passport::routes();
Route::post('/oauth/token', [
'uses' => '\App\Http\Controllers\AccessTokenController@issueToken',
'as' => 'passport.token',
'middleware' => 'throttle',
]);
}
输出php artisan route:list --name=passport.token
:
+--------+----------+-------------+--- ----------------------+---------------------------- ------------------------------------------------+- ------------+ | 域名 | 方法 | 网址 | 姓名 | 行动 | 中间件 | +--------+----------+-------------+--- ----------------------+---------------------------- ------------------------------------------------+- ------------+ | | 发布 | oauth/令牌 | 护照.token | App\Http\Controllers\AccessTokenController@issueToken | 油门 | | | 发布 | oauth/令牌/刷新 | 护照.token.refresh | Laravel\Passport\Http\Controllers\TransientTokenController@refresh | 网络,认证 | | | 得到|头| oauth/令牌 | 护照.tokens.index | Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@forUser | 网络,认证 | | | 删除 | oauth/令牌/{token_id} | 护照.tokens.destroy | Laravel\Passport\Http\Controllers\AuthorizedAccessTokenController@destroy | 网络,认证 | +--------+----------+-------------+--- ----------------------+---------------------------- ------------------------------------------------+- ------------+
推荐阅读
- html - fetch() API 正在截断 JSON 文件的位置
- javascript - 从对象到数组的转换
- c++ - 如何获取对不同类的引用以从所述类内部获取变量值?
- java - 在程序启动时启动数据库
- python - PySpark:从列中提取/收集第一个数组元素
- c# - 如何动态更改 ListView WPF 中的列宽?
- python - 如何将 pandas Timedelta 添加到特定业务和工作时间范围的时间戳
- swift - 表达式类型不明确,没有更多上下文 xcode 11
- reactjs - 如何更改antd上传组件中的上传文本?
- python - “如何在一行上打印多个用户输入”