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


Posted in PHP onSeptember 30, 2019

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

自定义用户表登录

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

<?php 
 'guards' => [ 
  'web' => [ 
   'driver' => 'session', 
   'provider' => 'users', 
  ], 
  'admin' => [ 
   'driver' => 'session', 
   'provider' => 'admins', 
  ], 
 'providers' => [ 
  'users' => [ 
   'driver' => 'eloquent', 
   'model' => App\User::class, 
  ], 
  'admins' => [ 
   'driver' => 'eloquent', 
   'model' => App\Models\Admin::class, 
  ], 
 ],

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

创建后台用户表和model

php artisan make:model Admin 
php artisan make:migration creaet_admins_table

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

Schema::create('admins', function (Blueprint $table) { 
   $table->increments('id'); 
   $table->string('name'); 
   $table->string('email'); 
   $table->string('password'); 
   $table->rememberToken(); 
   $table->timestamps(); 
  });

执行php artisan migrate

生成临时数据

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

$factory->define(App\Admin::class, function (Faker\Generator $faker) { 
 static $password; 
 
 return [ 
  'name' => $faker->name, 
  'password' => $password ?: $password = bcrypt('123456'), 
  'email' => $faker->email, 
  'remember_token' => str_random(10), 
 ]; 
});

打开命令行输入:

php artisan tinker 
 use App; 
 factory(App\Admin::class,5)->create() 
 //生成5条测试数据,你要几条就输入多少(Class,num)

更改 Admin 模型类

<?php 
 
namespace App; 
 
use Illuminate\Notifications\Notifiable; 
use Illuminate\Foundation\Auth\User as Authenticatable; 
 
class Admin extends Authenticatable 
{ 
 use Notifiable; 
 
 /** 
  * The attributes that are mass assignable. 
  * 
  * @var array 
  */ 
 protected $fillable = [ 
  'name', 'email', 'password', 
 ]; 
 
 /** 
  * The attributes that should be hidden for arrays. 
  * 
  * @var array 
  */ 
 protected $hidden = [ 
  'password', 'remember_token', 
 ]; 
}

创建控制器

php artisan make:controller Admin/LoginController 
php artisan make:controller Admin/AdminController

编辑 Admin/LoginController.php:

<?php 
 
namespace App\Http\Controllers\Admin; 
 
use Illuminate\Http\Request; 
use App\Http\Controllers\Controller; 
use Illuminate\Foundation\Auth\ThrottlesLogins; 
use Illuminate\Foundation\Auth\AuthenticatesUsers; 
 
class LoginController extends Controller 
{ 
 use AuthenticatesUsers; 
 
 /** 
  * Where to redirect users after login / registration. 
  * 
  * @var string 
  */ 
 protected $redirectTo = '/admin/index'; 
 protected $username; 
 
 /** 
  * Create a new controller instance. 
  * 
  * @return void 
  */ 
 public function __construct() 
 { 
  $this->middleware('guest:admin', ['except' => 'logout']); 
  $this->username = config('admin.global.username'); 
 } 
 
 /** 
  * 重写登录视图页面 
  */ 
 public function showLogin() 
 { 
  return view('admin.login.index'); 
 } 
 
 /** 
  * 自定义认证驱动 
  * @return mixed 
  */ 
 protected function guard() 
 { 
  return auth()->guard('admin'); 
 } 
 
 
}

修改 app\Http\Middleware\RedirectIfAuthenticated.php:

public function handle($request, Closure $next, $guard = null) 
 { 
  if (Auth::guard($guard)->check()) { 
   // 根据不同 guard 跳转到不同的页面 
   $url = $guard ? 'admin/dash':'/home'; 
   return redirect($url); 
  } 
 
  return $next($request); 
 }

编辑 Admin\AdminController.php:

<?php 
 
namespace App\Http\Controllers\Admin; 
 
use App\Http\Controllers\Controller; 
 
class AdminController extends Controller 
{ 
 /** 
  * Create a new controller instance. 
  * 
  * @return void 
  */ 
 public function __construct() 
 { 
  $this->middleware('auth.admin:admin'); 
 } 
 // 
 public function index() 
 { 
  dd('用户名:'.auth('admin')->user()->name); 
 }

编辑 app\Http\Middleware\AdminAuthMiddleware.php

public function handle($request, Closure $next, $guard = null) 
 { 
  if (Auth::guard($guard)->guest()) { 
   if ($request->ajax() || $request->wantsJson()) { 
    return response('Unauthorized.', 401); 
   } else { 
    return redirect()->guest('admin/login'); 
   } 
  } 
  return $next($request); 
 }

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

protected $routeMiddleware = [ 
  ··· ··· 
  'auth.admin' => \App\Http\Middleware\AdminAuthMiddleware::class, 
 ];

注册路由

编辑 routes/web.php :

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

视图文件创建和修改

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

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

访问 你的站点/admin/login

以上这篇Laravel5.5 实现后台管理登录的方法(自定义用户表登录)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
杏林同学录(四)
Oct 09 PHP
PHP+DBM的同学录程序(4)
Oct 09 PHP
PHP删除非空目录的函数代码小结
Feb 28 PHP
PHP Global变量定义当前页面的全局变量实现探讨
Jun 05 PHP
php生成图形验证码几种方法小结
Aug 15 PHP
PHP字符串的递增和递减示例介绍
Feb 11 PHP
PHP文件锁定写入实例解析
Jul 14 PHP
php判断表是否存在的方法
Jun 18 PHP
PHP中each与list用法分析
Jan 08 PHP
详解PHP的Yii框架中组件行为的属性注入和方法注入
Mar 18 PHP
PHP实现登录注册之BootStrap表单功能
Sep 03 PHP
Laravel框架Request、Response及Session操作示例
May 06 PHP
php面试实现反射注入的详细方法
Sep 30 #PHP
laravel5表单唯一验证的实例代码
Sep 30 #PHP
Laravel模糊查询区分大小写的实例
Sep 29 #PHP
基于laravel Request的所有方法详解
Sep 29 #PHP
基于Laravel 5.2 regex验证的正确写法
Sep 29 #PHP
php实现对文件压缩简单的方法
Sep 29 #PHP
Laravel 添加多语言提示信息的方法
Sep 29 #PHP
You might like
php bootstrap实现简单登录
2016/03/08 PHP
php指定长度分割字符串str_split函数用法示例
2017/01/30 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
laravel5.6中的外键约束示例
2019/10/23 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
JavaScript 不只是脚本
2007/05/30 Javascript
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
express的中间件basicAuth详解
2014/12/04 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
2015/02/23 Javascript
JavaScript判断用户是否对表单进行了修改的方法
2015/03/18 Javascript
Javascript中With语句用法实例
2015/05/14 Javascript
jquery分析文本里url或邮件地址为真实链接的方法
2015/06/20 Javascript
JS版元素周期表实现方法
2015/08/05 Javascript
js实现新年倒计时效果
2015/12/10 Javascript
jQuery鼠标悬浮链接弹出跟随图片实例代码
2016/01/08 Javascript
jQuery实现页面下拉100像素出现悬浮窗口的方法
2016/09/05 Javascript
详解Javascript数据类型的转换规则
2016/12/12 Javascript
AngularJS 实现购物车全选反选功能
2017/10/24 Javascript
javaScript和jQuery自动加载简单代码实现方法
2017/11/24 jQuery
bootstrap中日历范围选择插件daterangepicker的使用详解
2018/04/17 Javascript
jQuery pager.js 插件动态分页功能实例分析
2019/08/02 jQuery
[02:04]2016国际邀请赛中国区预选赛VG.R晋级之路
2016/07/01 DOTA
[44:40]Serenity vs Pain 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python基于DES算法加密解密实例
2015/06/03 Python
python实现一个简单的并查集的示例代码
2018/03/19 Python
Python3实现的字典、列表和json对象互转功能示例
2018/05/22 Python
django利用request id便于定位及给日志加上request_id
2018/08/26 Python
python导入模块交叉引用的方法
2019/01/19 Python
python ffmpeg任意提取视频帧的方法
2020/02/21 Python
解决paramiko执行命令超时的问题
2020/04/16 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
发展部经理职责规定
2014/02/22 职场文书
cf战队收人广告词
2014/03/14 职场文书
工厂门卫岗位职责范本
2014/04/04 职场文书
单位介绍信格式范文
2015/05/04 职场文书
全新239军机修复记
2022/04/05 无线电