gpt4 book ai didi

laravel-5 - 如何在 API 身份验证中只允许承载 token ?

转载 作者:行者123 更新时间:2023-12-04 08:24:47 25 4
gpt4 key购买 nike

使用 $this->middleware('auth:auth') 时,用户 token 可以作为查询字符串、请求有效负载或不记名 token 传递:https://laravel.com/docs/5.8/api-authentication#passing-tokens-in-requests
我只想允许通过不记名 token 进行身份验证。这意味着我不想允许通过查询字符串或发布请求进行身份验证。
我试图通过添加一个只删除 api_token 的中间件来解决它

public function handle($request, Closure $next)
{
$request->request->set('api_token', null);
return $next($request);
}
但不管我做什么
Route::group(['middleware' => ['auth:api', 'remove-api-token'],
或者
Route::group(['middleware' => ['remove-api-token', 'auth:api'],
将始终触发 auth:api第一的。所以我的方法行不通。
关于如何拒绝 auth:api 的 GET/POST 身份验证的任何想法只要?

最佳答案

一种选择是扩展现有的 tokenGuard并覆盖 getTokenForRequest()仅接受不记名 token 的方法:
创建一个新的守卫:
"app\Services\Auth\BearerTokenGuard.php"

<?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();
}
}
在服务提供商中定义您的新 Guard:
"app\Providers\AuthServiceProvider.php"
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']);
});
}
将您的新 guard 驱动程序添加到 guard 配置:
"config\auth.php"
'guards' => [
'api' => [
'driver' => 'bearerToken',
'provider' => 'users',
'hash' => false,
],
],
我没有测试过这个,但它应该可以工作,尽管它可能需要一些修改。

关于laravel-5 - 如何在 API 身份验证中只允许承载 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65320141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com