Laravel 5 如何在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);

使用$this->middleware('auth:auth')时,用户令牌可以作为查询字符串、请求负载或承载令牌传递:

我只允许通过承载令牌进行身份验证。这意味着我不想允许通过查询字符串或post请求进行身份验证

我试图通过添加一个中间件来解决这个问题,该中间件只是删除了api_令牌

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,
    ],
],