laravel-5 - 如何在 API 身份验证中只允许不记名令牌?
问题描述
使用 $this->middleware('auth:auth') 时,用户令牌可以作为查询字符串、请求负载或承载令牌传递:https ://laravel.com/docs/5.8/api-authentication#passing-tokens-请求中
我只想允许通过不记名令牌进行身份验证。这意味着我不想允许通过查询字符串或发布请求进行身份验证。
我试图通过添加一个仅删除 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 ()方法以仅接受不记名令牌:
创建一个新的守卫:
“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']);
});
}
将新的警卫驱动程序添加到警卫配置中:
“配置\auth.php”
'guards' => [
'api' => [
'driver' => 'bearerToken',
'provider' => 'users',
'hash' => false,
],
],
我没有对此进行测试,但它应该可以工作,尽管它可能需要一些修改。
推荐阅读
- android - 无法在 admob 广告下添加按钮
- c++ - 在一行中声明多个变量,它们的创建顺序是什么?
- javascript - 未捕获的类型错误:无法读取未定义的属性“弧”
- java - Gradle unknown 在 Eclipse 上创建或导入 Gradle 项目时导入配置
- spring - Spring Boot 中用于 REST 控制器的自定义 HandlerAdapter
- amazon-web-services - 如何在我的 EC2 中检查 Web 访问者访问
- java - 如何打印 * 的金字塔
- asp.net - 如何在 ASP.NET 中手动检索创建 POST 请求的表单数据
- c++ - 为什么构造函数调用构造函数会产生奇怪的结果?
- java - Java 控制器和服务 - 在服务中实现 Getter 和 Setter