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 download.php实现代码 跳转到下载文件(response.redirect)
Aug 26 PHP
使用PHP获取网络文件的实现代码
Jan 01 PHP
PHP迅雷、快车、旋风下载专用链转换代码
Jun 15 PHP
PHP 获取远程网页内容的代码(fopen,curl已测)
Jun 06 PHP
PHP中的use关键字概述
Jul 23 PHP
php实现删除指定目录下相关文件的方法
Oct 20 PHP
Sublime里直接运行PHP配置方法
Nov 28 PHP
ubuntu下配置nginx+php+mysql详解
Sep 10 PHP
PHP自带方法验证邮箱是否存在
Feb 01 PHP
thinkPHP5框架自定义验证器实现方法分析
Jun 11 PHP
php实现微信企业付款到个人零钱功能
Oct 09 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 文本文件的读取效率
2012/02/10 PHP
Zend的AutoLoad机制介绍
2012/09/27 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
2016/03/06 PHP
JS动画效果代码3
2008/04/03 Javascript
js字符串转换成xml对象并使用技巧解读
2013/04/18 Javascript
js简单实现让文本框内容逐个字的显示出来
2013/10/22 Javascript
简单的JavaScript互斥锁分享
2014/02/02 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
使用jQuery判断IE浏览器版本的代码
2014/06/14 Javascript
js实现百度搜索提示框
2017/02/05 Javascript
js仿淘宝商品放大预览功能
2017/03/15 Javascript
微信小程序 动态绑定事件并实现事件修改样式
2017/04/13 Javascript
详解Angular2组件之间如何通信
2017/06/22 Javascript
vue-rx的初步使用教程
2018/09/21 Javascript
使用 Node.js 实现图片的动态裁切及算法实例代码详解
2018/09/29 Javascript
基于JS实现table导出Excel并保留样式
2020/05/19 Javascript
[01:20:38]完美世界DOTA2联赛 GXR vs IO 第一场 11.07
2020/11/09 DOTA
python条件和循环的使用方法
2013/11/01 Python
Python实现简单登录验证
2016/04/13 Python
python字符类型的一些方法小结
2016/05/16 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
2017/09/25 Python
python3学习笔记之多进程分布式小例子
2018/02/13 Python
浅谈Python中的zip()与*zip()函数详解
2018/02/24 Python
python版本的仿windows计划任务工具
2018/04/30 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
Django如何重置migration的几种情景
2021/02/24 Python
大众服装店创业计划书范文
2014/01/01 职场文书
小学中秋节活动方案
2014/02/06 职场文书
自荐信的格式
2014/03/10 职场文书
群众路线教育实践活动个人对照检查材料思想汇报(社区班子)
2014/10/06 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
四风问题党员个人整改措施
2014/10/27 职场文书
小学家长意见怎么写
2015/06/03 职场文书
收入证明怎么写
2015/06/12 职场文书
Java循环队列与非循环队列的区别总结
2021/06/22 Java/Android
vue 实现弹窗关闭后刷新效果
2022/04/08 Vue.js