如何在带警卫的流明中实现多重身份验证?
Posted
技术标签:
【中文标题】如何在带警卫的流明中实现多重身份验证?【英文标题】:How to implement multiple authentication in lumen with guards? 【发布时间】:2020-08-08 18:00:06 【问题描述】:我是 lumen 的新手。我在互联网上搜索并没有找到正确的答案,所以我发布了这个问题。我已经实现了身份验证,并且效果非常好。 现在的问题是,当我尝试使用 auth guard 中间件实现多个身份验证时,我不知道如何实现它。
到目前为止我所做的事情 -
在 bootstrap/app.php 中取消注释
$app->withFacades();
$app->withEloquent();
$app->routeMiddleware(['auth' => App\Http\Middleware\Authenticate::class,]);
$app->register(App\Providers\AppServiceProvider::class);
$app->register(App\Providers\AuthServiceProvider::class);
$app->register(App\Providers\EventServiceProvider::class);
为客户和管理员创建迁移、模型和登录/注册控制器。
创建配置/auth.php
<?php
return [
/*
|--------------------------------------------------------------------------
| Authentication Defaults
|--------------------------------------------------------------------------
|
*/
'defaults' => [
'guard' => env('AUTH_GUARD', 'customer'),
],
/*
|--------------------------------------------------------------------------
| Authentication Guards
|--------------------------------------------------------------------------
|
*/
'guards' => [
'customer' => [
'driver' => 'token',
'provider' => 'customers',
],
'admin' => [
'driver' => 'token',
'provider' => 'admins',
]
],
/*
|--------------------------------------------------------------------------
| User Providers
|--------------------------------------------------------------------------
|
*/
'providers' => [
'customers' => [
'driver' => 'eloquent',
'model' => App\Model\Customer\Customer::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Model\Admin\Admin::class,
]
],
/*
|--------------------------------------------------------------------------
| Resetting Passwords
|--------------------------------------------------------------------------
|
*/
'passwords' => [
//
],
];
我的认证服务商
public function boot()
$this->app['auth']->viaRequest('token', function ($request)
if ($request->input('api_token'))
return Customer::where('api_token', $request->input('api_token'))->first();
);
如果您注意到,它当前仅对 Customer 模型进行身份验证。不管我用的是什么警卫。 请让我知道如何使其动态化。
** 我没有使用 JWT 或任何其他驱动程序。
【问题讨论】:
【参考方案1】:这可能已经晚了,但我也遇到了类似的问题。 我也尝试使用身份验证保护,但我无法让它工作,我使用了路由前缀。 阅读文档后 Again, you may retrieve the authenticated user however you wish. 我试过这个
public function boot()
$this->app['auth']->viaRequest('token', function ($request)
if ($request->input('api_token'))
if ($request->is('c/*'))
// Prefix for Customer endpoints
return Customer::where('api_token', $request->input('api_token'))->first();
elseif ($request->is('admin/*'))
// Prefix for Admin endpoints
return Admin::where('api_token', $request->input('api_token'))->first();
);
你也可以使用Gates/Policies
【讨论】:
以上是关于如何在带警卫的流明中实现多重身份验证?的主要内容,如果未能解决你的问题,请参考以下文章