?。。?!轉(zhuǎn)載請(qǐng)注明作者和本文鏈接?。。?!
上篇說到了可以Passport自帶路由,我們可以進(jìn)行注冊(cè)。但是我們卻不想使用Passport自帶的路由怎么辦?
我們來看看Passport的注冊(cè)路由函數(shù)
Passport::routes()
vendor/laravel/passport/src/Passport.php
/**
* Binds the Passport routes into the controller.
*
* @param callable|null $callback
* @param array $options
* @return void
*/
public static function routes($callback = null, array $options = [])
{
$callback = $callback ?: function ($router) {
$router->all();
};
$defaultOptions = [
'prefix' => 'oauth',
'namespace' => '\Laravel\Passport\Http\Controllers',
];
$options = array_merge($defaultOptions, $options);
Route::group($options, function ($router) use ($callback) {
$callback(new RouteRegistrar($router));
});
}
我們可以看到這個(gè)函數(shù)有兩個(gè)參數(shù)
第一個(gè)參數(shù):callback
這個(gè)參數(shù)是個(gè)回調(diào),看最后Route::group里面的代碼,這個(gè)回調(diào)的定義類似如下這種
function(RouteRegistrar $router) {
//...
}
而其中的RouteRegistrar,里面就提供了Passport路由具體的注冊(cè),具體的代碼詳情可以看vendor/laravel/passport/src/RouteRegistrar.php,里面也給出了授權(quán),獲取accesstoken等等一些系列接口,還能看到具體這些接口的方法,路由定義等等
第二個(gè)參數(shù):options
$defaultOptions = [
'prefix' => 'oauth',
'namespace' => '\Laravel\Passport\Http\Controllers',
];
這個(gè)Options是Route::group中使用的參數(shù),其意義和Route::group中規(guī)定的是一樣的,可以用來配置這組路由的中間件、命名空間、子域名、路由前綴等等。從Passport的代碼來看,Passport會(huì)提供兩個(gè)prefix和namespace兩個(gè)默認(rèn)設(shè)置。所以,我們可以通過修改Options來達(dá)到自定義配置的目的。
比如,我這個(gè)項(xiàng)目Api是有路由前綴的,那么就修改prefix,代碼如下
//不帶回調(diào),默認(rèn)注冊(cè)Passport所有路由
Passport::routes(null,['prefix' => 'api/oauth']);
或者
//帶回調(diào),只想保留AccessToken相關(guān)路由
Passport::routes(function(RouteRegistrar $router) {
$router->forAccessTokens();
},['prefix' => 'api/oauth']);
最后就會(huì)發(fā)現(xiàn),本來是post http://host/oauth/token可以獲取到access token,現(xiàn)在修改了前綴,需要post http://host/api/oauth/token才能獲取到了
預(yù)告:下一篇會(huì)寫如何自定義返回內(nèi)容
!?。?!轉(zhuǎn)載請(qǐng)注明作者和本文鏈接?。。?!