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 相关文章推荐
如何把PHP转成EXE文件
Oct 09 PHP
PHP 和 MySQL 开发的 8 个技巧
Oct 09 PHP
数据库查询记录php 多行多列显示
Aug 15 PHP
解析php中获取系统信息的方法
Jun 25 PHP
php实现的一个很好用HTML解析器类可用于采集数据
Sep 23 PHP
php cookie使用方法学习笔记分享
Nov 07 PHP
destoon之一键登录设置
Jun 21 PHP
一个简单安全的PHP验证码类、PHP验证码
Sep 24 PHP
php 5.4 全新的代码复用Trait详解
Jan 05 PHP
PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析
Feb 04 PHP
php + WebUploader实现图片批量上传功能
May 06 PHP
PHP如何使用array_unshift()在数组开头插入元素
Sep 01 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
Discuz板块横排显示图片的实现方法
2007/05/28 PHP
PHP中通过fopen()函数访问远程文件示例
2014/11/18 PHP
php可应用于面包屑导航的递归寻找家谱树实现方法
2015/02/02 PHP
PHP调试的强悍利器之PHPDBG
2016/02/22 PHP
PHP中的print_r 与 var_dump 输出数组
2016/06/13 PHP
JS去除字符串的空格增强版(可以去除中间的空格)
2009/08/26 Javascript
JavaScript 自动分号插入(JavaScript synat:auto semicolon insertion)
2009/11/04 Javascript
Javascript创建自定义对象 创建Object实例添加属性和方法
2012/06/04 Javascript
jquery foreach使用示例
2013/09/12 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
javaScript中slice函数用法实例分析
2015/06/08 Javascript
基于jQuery Tipso插件实现消息提示框特效
2016/03/16 Javascript
Vue自定义指令拖拽功能示例
2017/02/17 Javascript
荐书|您有一份JavaScript书单待签收
2017/07/21 Javascript
详解vue中引入stylus及报错解决方法
2017/09/22 Javascript
layui异步加载table表中某一列数据的例子
2019/09/16 Javascript
js new Date()实例测试
2019/10/31 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
JavaScript React如何修改默认端口号方法详解
2020/07/28 Javascript
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
python中enumerate函数遍历元素用法分析
2016/03/11 Python
Python中max函数用于二维列表的实例
2018/04/03 Python
Python实现的求解最小公倍数算法示例
2018/05/03 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
2019/06/26 Python
python实现随机加减法生成器
2020/02/24 Python
css3 transform属性详解
2014/09/30 HTML / CSS
Canvas中设置width与height的问题浅析
2018/11/01 HTML / CSS
安全资料员岗位职责
2013/12/14 职场文书
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
感恩老师的演讲稿
2014/05/06 职场文书
学雷锋标兵事迹材料
2014/08/18 职场文书
综合测评自我评价
2015/03/06 职场文书
小学远程教育工作总结
2015/08/13 职场文书
教师法制教育培训学习心得体会
2016/01/14 职场文书
小学一年级语文教学反思
2016/03/03 职场文书
Java中使用Filter过滤器的方法
2021/06/28 Java/Android