当前位置:首页 > CMS教程 > 其它CMS > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-12-25 15:50:07 浏览: 评论:0 

最近群里很多人文档,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.  ], 

标红的是我们后添加的后台管理员登录身份

创建后台用户表和model

php artisan make:model Admin

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. {  
  10.  use Notifiable;  
  11.    
  12.  /**  
  13.   * The attributes that are mass assignable.  
  14.   *  
  15.   * @var array  
  16.   */ 
  17.  protected $fillable = [  
  18.   'name''email''password',  
  19.  ];  
  20.    
  21.  /**  
  22.   * The attributes that should be hidden for arrays.  
  23.   *  
  24.   * @var array  
  25.   */ 
  26.  protected $hidden = [  
  27.   'password''remember_token',  
  28.  ];  

创建控制器

php artisan make:controller Admin/LoginController

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. {  
  12.  use AuthenticatesUsers;  
  13.    
  14.  /**  
  15.   * Where to redirect users after login / registration.  
  16.   *  
  17.   * @var string  
  18.   */ 
  19.  protected $redirectTo = '/admin/index';  
  20.  protected $username;  
  21.    
  22.  /**  
  23.   * Create a new controller instance.  
  24.   *  
  25.   * @return void  
  26.   */ 
  27.  public function __construct()  
  28.  {  
  29.   $this->middleware('guest:admin', ['except' => 'logout']);  
  30.   $this->username = config('admin.global.username');  
  31.  }  
  32.    
  33.  /**  
  34.   * 重写登录视图页面  
  35.   */ 
  36.  public function showLogin()  
  37.  {  
  38.   return view('admin.login.index');  
  39.  }  
  40.    
  41.  /**  
  42.   * 自定义认证驱动  
  43.   * @return mixed  
  44.   */ 
  45.  protected function guard()  
  46.  {  
  47.   return auth()->guard('admin');  
  48.  }  
  49.    
  50.    
  51. }  

修改 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.  /**  
  10.   * Create a new controller instance.  
  11.   *  
  12.   * @return void  
  13.   */ 
  14.  public function __construct()  
  15.  {  
  16.   $this->middleware('auth.admin:admin');  
  17.  }  
  18.  //  
  19.  public function index()  
  20.  {  
  21.   dd('用户名:'.auth('admin')->user()->name);  
  22.  }  

编辑 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. {  
  3.  $router->get('login''LoginController@showLogin')->name('admin.login');  
  4.  $router->post('login''LoginController@login');  
  5.  $router->post('logout''LoginController@logout');  
  6.    
  7.  $router->get('index''AdminController@index');  
  8. }); 

视图文件创建和修改

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

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

访问 你的站点/admin/login

Tags: Laravel5 5后台管理登录

分享到: