开发笔记:手动搭建系统后台-认证用户
新手慢慢学习中,把开发过程中遇到的问题及解决办法记录下来。
Laravel版本:Laravel5.7
首先在 config/auth.php 文件中注册相应的看守器 Guard 与服务提供者 providers
'guards' => [
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
],
'providers' => [
'admins' => [
'driver' => 'eloquent',
'model' => App\Models\Admin\AdminUser::class,
],
],
在路由中使用路由组Route::group()与路由中间件对用户进行限制
Route::group(['middleware'=>'auth:admin'],function (){
//
});
然后在控制器中通过访问指定的看守器实例来进行身份验证
if (Auth::guard('admin')->attempt($data)) {
//
}
注销登录
Auth::guard('admin')->logout();
return redirect('/admin/login');
此时会出现问题,logout()默认会去数据库中清除remember_token,但建立后台数据表没有建立remember_token字段。解决办法:在AdminUser.php模型文件中重写$rememberTokenName
属性为空
protected $rememberTokenName = '';
更改未认证用户直接通过get请求访问后台页面时自动跳转页面路径
默认的跳转,是在App/Http/Middleware/Authenticate
redirectTo
方法中实现的:
protected function redirectTo($request)
{
if (! $request->expectsJson()) {
return route('login');
}
}
更改默认跳转删掉上述的App/Http/Middleware/Authenticate redirectTo方法,在App/Exceptions/Handler中添加unauthenticated方法,通过AuthenticationException能拿到当前guard,通过判断guard进行相应的跳转:
……
use Illuminate\Auth\AuthenticationException;
……
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
//修改前后台未登录跳转页面
if (in_array('admin',$exception->guards())){
return redirect('/admin/login');
}
return redirect()->guest(route('login'));
}
1