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 Socket 编程
Apr 09 PHP
解析smarty 截取字符串函数 truncate的用法介绍
Jun 20 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
Jun 25 PHP
ecshop实现smtp发送邮件
Feb 03 PHP
php使用for语句输出三角形的方法
Jun 09 PHP
PHP与Ajax相结合实现登录验证小Demo
Mar 16 PHP
WordPress过滤垃圾评论的几种主要方法小结
Jul 11 PHP
详解PHP中foreach的用法和实例
Oct 25 PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
Nov 15 PHP
PHP 无限级分类
May 04 PHP
PHP _construct()函数讲解
Feb 03 PHP
laravel 如何实现引入自己的函数或类库
Oct 15 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新建文件自动编号的思路与实现
2011/06/27 PHP
PHP将整个网站生成HTML纯静态网页的方法总结
2012/02/05 PHP
探讨多键值cookie(php中cookie存取数组)的详解
2013/06/06 PHP
ThinkPHP实现将本地文件打包成zip下载
2014/06/26 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
2015/09/10 PHP
CodeIgniter框架实现的整合Smarty引擎DEMO示例
2019/03/28 PHP
JavaScript高级程序设计 读书笔记之十 本地对象Date日期
2012/02/27 Javascript
jQuery学习笔记 操作jQuery对象 属性处理
2012/09/19 Javascript
jquery 滚动条事件简单实例
2013/07/12 Javascript
nodeType属性返回被选节点的节点类型介绍
2013/11/22 Javascript
ExtJS 刷新后如何默认选中刷新前最后一次选中的节点
2014/04/03 Javascript
jquery的总体架构分析及实现示例详解
2014/11/08 Javascript
jQuery使用hide方法隐藏元素自身用法实例
2015/03/30 Javascript
javascript跨域的方法汇总
2015/10/23 Javascript
详谈javascript异步编程
2016/02/21 Javascript
微信小程序-滚动消息通知的实例代码
2017/08/03 Javascript
Javascript幻灯片播放功能实现过程解析
2020/05/07 Javascript
webpack5 联邦模块介绍详解
2020/07/08 Javascript
pycharm 使用心得(六)进行简单的数据库管理
2014/06/06 Python
用Python计算三角函数之acos()方法的使用
2015/05/15 Python
python实现K最近邻算法
2018/01/29 Python
基于python 二维数组及画图的实例详解
2018/04/03 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
2018/05/16 Python
Python 查看list中是否含有某元素的方法
2018/06/27 Python
Python3.5运算符操作实例详解
2019/04/25 Python
Python range、enumerate和zip函数用法详解
2019/09/11 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
Python实现对adb命令封装
2020/03/06 Python
Keras模型转成tensorflow的.pb操作
2020/07/06 Python
python3.8动态人脸识别的实现示例
2020/09/21 Python
详解Pytorch显存动态分配规律探索
2020/11/17 Python
苹果中国官方网站:Apple中国
2016/07/22 全球购物
施华洛世奇西班牙官网:SWAROVSKI西班牙
2019/06/06 全球购物
幼儿园小班教学反思
2014/02/02 职场文书
导游词之南迦巴瓦峰
2019/11/19 职场文书
CSS3点击按钮圆形进度打钩效果的实现代码
2021/03/30 HTML / CSS