开发笔记:手动搭建系统后台-认证用户

新手慢慢学习中,把开发过程中遇到的问题及解决办法记录下来。

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

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。