- 本文地址: https://www.yangdx.com/2020/05/149.html
- 转载请注明出处
Lumen 框架默认只有一种角色认证(单表),但是通常我们会把后台管理员与前台用户设计成两个不同的表,这个时候就得改造一下代码了。
假设后台管理员和前台用户对应 Model 分别为 App\Models\Admin
和 App\Models\User
,作如下修改:
1、修改 bootstrap/app.php
启用 Facade,拿掉 Authenticate 中间件和 AuthServiceProvider 服务提供者的代码注释:
// 启用 Facade
$app->withFacades();
// ...无关代码略...
$app->routeMiddleware([
'auth' => App\Http\Middleware\Authenticate::class,
]);
// ...无关代码略...
$app->register(App\Providers\AuthServiceProvider::class);
2、添加配置文件 config/auth.php
定义两个 guard,一个用于前台,一个用于后台,默认前台。内容如下:
<?php
return [
'defaults' => [
'guard' => 'user',
],
'guards' => [
'user' => [
'driver' => 'user',
],
'admin' => [
'driver' => 'admin',
]
]
];
3、修改 app/Http/Middleware/Authenticate.php
在头部引入两个 Model,然后修改它的 boot 方法,实现两个 guard 的认证方式:
<?php
namespace App\Providers;
use App\Models\User;
use App\Models\Admin;
use Illuminate\Support\ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
public function register()
{
}
public function boot()
{
// 示例:验证成功返回 User 模型实例
$this->app['auth']->viaRequest('user', function ($request) {
$token = $request->header('user-token');
if ($token) {
return User::where('token', $token)->first();
}
});
// 示例:验证成功返回 Admin 模型实例
$this->app['auth']->viaRequest('admin', function ($request) {
$token = $request->header('admin-token');
if ($token) {
return Admin::where('token', $token)->first();
}
});
}
}
4、在路由 routes/web.php 中使用中间件
// 前台认证的中间件写 auth 或 auth:user 都可以
$router->get('user/profile', ['middleware' => 'auth', function () {
//
}]);
// 后台认证的中间件要写完整 auth:admin
$router->get('admin/profile', ['middleware' => 'auth:admin', function () {
//
}]);
5、获取已认证的用户实例
先在类文件头部引入认证的 Facade:use Illuminate\Support\Facades\Auth
,然后,如果是获取已认证的前台用户实例直接用 Auth::user()
就可以,如果是获取后台已认证的用户实例,要指定 guard,即:Auth::guard('admin')->user()
。
快来评论一下吧!
发表评论