Laravel —— 多套用户登录
Laravel 自带了用户认证 Auth。有看守器和提供器来实现。
对于前后台都需要登录的系统,需要添加一套用户认证。
本文中使用 Laravel 9。
一、生成自带的用户认证
php artisan ui:auth
1、执行脚手架命令后生成下面的代码
- app/Http/Controllers/Auth/ 相关控制器
- resources/views/auth/ 相关页面
- routes/web.php 路由中追加了 Auth 系列
2、对应用户表 users,
3、加上 config/auth.php 配置文件中设置的 guards、providers,即可实现登录注册、邮箱验证、修改密码等操作。
二、生成新用户表 members
创建 migration,生成自定义表
三、修改配置文件
1、在 config/auth.php 文件中,providers 数组中添加,
'members' => [
'driver' => 'eloquent',
'model' => App\Models\Member::class,
],
2、guards 数组中添加
'front' => [
'driver' => 'session',
'provider' => 'members',
],
四、重写登录注册方法
底层文件再 vendor/laravel/ui/auth-backend/ 目录,
继承相应的控制器,并根据需求重写方法。
1、重写登录控制器方法
// 修改成上面自定义的看守器
protected function guard()
{
return Auth::guard(‘front’);
}
// 修改登录表单用户名
public function username()
{
return 'account';
}
// 修改实现多类型账号登录
protected function attemptLogin(Request $request)
{
return collect(['mail', 'tel', 'name'])->contains(function ($value) use ($request) {
$account = $request->get($this->username());
$password = $request->get('password');
return $this->guard()->attempt(
[$value => $account, 'password' => $password], $request->filled('remember')
);
});
}
2、其他控制器,按照需求重写即可。
五、给路由添加登录验证
1、新建中间件文件
php artisan make:middleware AuthMember
// 修改文件中的 handle 方法
public function handle(Request $request, Closure $next)
{
if (\Auth::guard('front')->guest()) {
if ($request->ajax() || $request->wantsJson()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('login');
}
}
return $next($request);
}
2、把新建的路由,添加在 app/Http/Kernel.php 文件中
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
...
...
'auth.member' => \App\Http\Middleware\AuthMember::class,
];
3、路由中添加中间件
Route::prefix('/')->middleware('auth.member')->group(function(){
Route::get('/', [IndexController::class, 'index'])->name('home');
});