Laravel5.5 实现后台管理登录(自定义用户表登录)

最近群里很多人文档,laravel如何做会员和管理两个身份登录,今天把教程分享一下

自定义用户表登录

认证是由 guards 和 providers 两部分构成的, defaults 配置是默认选择一个 guard 认证驱动,所以我们在这两个配置项中分别添加一个 admin 和 admins 选项。

  1. <?php 
  2.   'guards' => [ 
  3.         'web' => [ 
  4.             'driver' => 'session'
  5.             'provider' => 'users'
  6.         ], 
  7.         'admin' => [ 
  8.             'driver' => 'session', 
  9.             'provider' => 'admins', 
  10.         ], 
  11.   'providers' => [ 
  12.         'users' => [ 
  13.             'driver' => 'eloquent'
  14.             'model' => App\User::class
  15.         ], 
  16.         'admins' => [ 
  17.             'driver' => 'eloquent', 
  18.             'model' => App\Models\Admin::class, 
  19.         ], 
  20.     ], 
  21.  
  22.  
标红的是我们后添加的后台管理员登录身份

创建后台用户表和model

  1. php artisan make:model Admin 
  2. php artisan make:migration creaet_admins_table 

在数据库迁移文件 _create_admins_table , 我们可以复制 users 迁移文件里的字段

  
  1. Schema::create('admins'function (Blueprint $table) { 
  2.             $table->increments('id'); 
  3.             $table->string('name'); 
  4.             $table->string('email'); 
  5.             $table->string('password'); 
  6.             $table->rememberToken(); 
  7.             $table->timestamps(); 
  8.         }); 

执行php artisan migrate

生成临时数据

在 database/factories/ModelFactory.php, 添加如下数据:

  1. $factory->define(App\Admin::classfunction (Faker\Generator $faker) { 
  2.     static $password
  3.  
  4.     return [ 
  5.         'name' => $faker->name, 
  6.         'password' => $password ?: $password = bcrypt('123456'), 
  7.         'email' =>  $faker->email, 
  8.         'remember_token' => str_random(10), 
  9.     ]; 
  10. }); 

打开命令行输入:
 
  1. php artisan tinker 
  2.  use App; 
  3.  factory(App\Admin::class,5)->create() 
  4.  //生成5条测试数据,你要几条就输入多少(Class,num) 
更改 Admin 模型类

  1. <?php 
  2.  
  3. namespace App; 
  4.  
  5. use Illuminate\Notifications\Notifiable; 
  6. use Illuminate\Foundation\Auth\User as Authenticatable; 
  7.  
  8. class Admin extends Authenticatable 
  9.     use Notifiable; 
  10.  
  11.     /** 
  12.      * The attributes that are mass assignable. 
  13.      * 
  14.      * @var array 
  15.      */ 
  16.     protected $fillable = [ 
  17.         'name''email''password'
  18.     ]; 
  19.  
  20.     /** 
  21.      * The attributes that should be hidden for arrays. 
  22.      * 
  23.      * @var array 
  24.      */ 
  25.     protected $hidden = [ 
  26.         'password''remember_token'
  27.     ]; 
创建控制器

  1. php artisan make:controller Admin/LoginController 
  2. php artisan make:controller Admin/AdminController 

编辑 Admin/LoginController.php:

  1. <?php 
  2.  
  3. namespace App\Http\Controllers\Admin; 
  4.  
  5. use Illuminate\Http\Request; 
  6. use App\Http\Controllers\Controller; 
  7. use Illuminate\Foundation\Auth\ThrottlesLogins; 
  8. use Illuminate\Foundation\Auth\AuthenticatesUsers; 
  9.  
  10. class LoginController extends Controller 
  11.     use AuthenticatesUsers; 
  12.  
  13.     /** 
  14.      * Where to redirect users after login / registration. 
  15.      * 
  16.      * @var string 
  17.      */ 
  18.     protected $redirectTo = '/admin/index'
  19.     protected $username
  20.  
  21.     /** 
  22.      * Create a new controller instance. 
  23.      * 
  24.      * @return void 
  25.      */ 
  26.     public function __construct() 
  27.     { 
  28.         $this->middleware('guest:admin', ['except' => 'logout']); 
  29.         $this->username = config('admin.global.username'); 
  30.     } 
  31.  
  32.     /** 
  33.      * 重写登录视图页面 
  34.      */ 
  35.     public function showLogin() 
  36.     { 
  37.         return view('admin.login.index'); 
  38.     } 
  39.  
  40.     /** 
  41.      * 自定义认证驱动 
  42.      * @return mixed 
  43.      */ 
  44.     protected function guard() 
  45.     { 
  46.         return auth()->guard('admin'); 
  47.     } 
  48.  
  49.  
修改 app\Http\Middleware\RedirectIfAuthenticated.php:

  1. public function handle($request, Closure $next$guard = null) 
  2.     { 
  3.         if (Auth::guard($guard)->check()) { 
  4.             // 根据不同 guard 跳转到不同的页面 
  5.             $url = $guard ? 'admin/dash':'/home'
  6.             return redirect($url); 
  7.         } 
  8.  
  9.         return $next($request); 
  10.     } 
编辑 Admin\AdminController.php:

  1. <?php 
  2.  
  3. namespace App\Http\Controllers\Admin; 
  4.  
  5. use App\Http\Controllers\Controller; 
  6.  
  7. class AdminController extends Controller 
  8.     /** 
  9.      * Create a new controller instance. 
  10.      * 
  11.      * @return void 
  12.      */ 
  13.     public function __construct() 
  14.     { 
  15.         $this->middleware('auth.admin:admin'); 
  16.     } 
  17.     // 
  18.     public function index() 
  19.     { 
  20.         dd('用户名:'.auth('admin')->user()->name); 
  21.     } 
编辑 app\Http\Middleware\AdminAuthMiddleware.php

  1. public function handle($request, Closure $next$guard = null) 
  2.     { 
  3.         if (Auth::guard($guard)->guest()) { 
  4.             if ($request->ajax() || $request->wantsJson()) { 
  5.                 return response('Unauthorized.', 401); 
  6.             } else { 
  7.                 return redirect()->guest('admin/login'); 
  8.             } 
  9.         } 
  10.         return $next($request); 
  11.     } 

在 app\Http\Kernel.php 中注册:

  1. protected $routeMiddleware = [ 
  2.        ··· ··· 
  3.         'auth.admin' => \App\Http\Middleware\AdminAuthMiddleware::class
  4.     ]; 
注册路由

编辑 routes/web.php :

  1. Route::group(['prefix' => 'admin','namespace' => 'Admin'],function ($router
  2.     $router->get('login''LoginController@showLogin')->name('admin.login'); 
  3.     $router->post('login''LoginController@login'); 
  4.     $router->post('logout''LoginController@logout'); 
  5.  
  6.     $router->get('index''AdminController@index'); 
  7. }); 

视图文件创建和修改

复制 resources\views\auth\login.blade.php,到 resources\views\admin\login\index.blade.php,修改表单提交地址

  1. {{ url('/login') }} 改成 {{ route('admin.login') }} 

访问 你的站点/admin/login

猜你喜欢

转载自blog.csdn.net/sunjinyan_1/article/details/80927611