Laravel 5 如何在API身份验证中仅允许承载令牌?
使用$this->middleware('auth:auth')时,用户令牌可以作为查询字符串、请求负载或承载令牌传递: 我只允许通过承载令牌进行身份验证。这意味着我不想允许通过查询字符串或post请求进行身份验证 我试图通过添加一个中间件来解决这个问题,该中间件只是删除了api_令牌Laravel 5 如何在API身份验证中仅允许承载令牌?,laravel-5,Laravel 5,使用$this->middleware('auth:auth')时,用户令牌可以作为查询字符串、请求负载或承载令牌传递: 我只允许通过承载令牌进行身份验证。这意味着我不想允许通过查询字符串或post请求进行身份验证 我试图通过添加一个中间件来解决这个问题,该中间件只是删除了api_令牌 public function handle($request, Closure $next) { $request->request->set('api_token', null);
public function handle($request, Closure $next)
{
$request->request->set('api_token', null);
return $next($request);
}
但不管我做什么
Route::group(['middleware' => ['auth:api', 'remove-api-token'],
或
将始终首先触发auth:api
。因此,我的方法不起作用
如何仅拒绝对
auth:api
的GET/POST身份验证?一个选项是扩展现有方法并覆盖该方法以仅接受承载令牌:
创建新的防护:
“app\Services\Auth\BearerTokenGuard.php”
将新的guard驱动程序添加到guards配置:
“config\auth.php”
我还没有测试过这个,但是它应该可以工作,尽管它可能需要一些修改
Route::group(['middleware' => ['remove-api-token', 'auth:api'],
<?php
namespace App\Services\Auth;
use Illuminate\Auth\TokenGuard;
class BearerTokenGuard extends TokenGuard
{
/**
* Get the token for the current request.
*
* @return string
*/
public function getTokenForRequest()
{
return $this->request->bearerToken();
}
}
use App\Services\Auth\BearerTokenGuard;
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
Auth::extend('bearerToken', function ($app, $name, array $config) {
return new BearerTokenGuard(Auth::createUserProvider($config['provider']), $app['request']);
});
}
'guards' => [
'api' => [
'driver' => 'bearerToken',
'provider' => 'users',
'hash' => false,
],
],