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 相关文章推荐
MySQL授权问题总结
May 06 PHP
PHP截取汉字乱码问题解决方法mb_substr函数的应用
Mar 30 PHP
php操作excel文件 基于phpexcel
Jul 02 PHP
PHP求最大子序列和的算法实现
Jun 24 PHP
Linux fgetcsv取得的数组元素为空字符串的解决方法
Nov 25 PHP
解析PHP留言本模块主要功能的函数说明(代码可实现)
Jun 25 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
Feb 13 PHP
开源php中文分词系统SCWS安装和使用实例
Apr 11 PHP
php模拟登陆的实现方法分析
Jan 09 PHP
php中删除数组的第一个元素和最后一个元素的函数
Mar 07 PHP
php头像上传预览实例代码
May 02 PHP
PHP大文件分割分片上传实现代码
Dec 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模板,主要想体现一下思路
2006/12/25 PHP
PHP游戏编程25个脚本代码
2011/02/08 PHP
PHP时间处理类操作示例
2018/09/05 PHP
YII框架http缓存操作示例
2019/04/29 PHP
PHP7 foreach() 函数修改
2021/03/09 PHP
Jquery操作Select 简单方便 一个js插件搞定
2009/11/12 Javascript
Javascript绝句欣赏 一些经典的js代码
2012/02/22 Javascript
用js判断页面是否加载完成实现代码
2012/12/11 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
2015/01/13 Javascript
使用Raygun对Node.js应用进行错误处理的方法
2015/06/23 Javascript
js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)
2015/07/18 Javascript
jquery通过name属性取值的简单实现方法
2016/06/20 Javascript
详解在vue-cli中引用jQuery、bootstrap以及使用sass、less编写css
2017/11/08 jQuery
Vue实现带进度条的文件拖动上传功能
2018/02/23 Javascript
ionic2中使用自动生成器的方法
2018/03/04 Javascript
vue实现重置表单信息为空的方法
2018/09/29 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
JS实现的自定义map方法示例
2019/05/17 Javascript
小谈angular ng deploy的实现
2020/04/07 Javascript
Vue实现PC端靠边悬浮球的代码
2020/05/09 Javascript
JS中箭头函数与this的写法和理解
2021/01/14 Javascript
[01:20]DOTA2 2017国际邀请赛冠军之路无止竞
2017/06/19 DOTA
Python上传package到Pypi(代码简单)
2016/02/06 Python
详解Anconda环境下载python包的教程(图形界面+命令行+pycharm安装)
2019/11/11 Python
Python 面向对象之类class和对象基本用法示例
2020/02/02 Python
在 Linux/Mac 下为Python函数添加超时时间的方法
2020/02/20 Python
如何使用repr调试python程序
2020/02/28 Python
python uuid生成唯一id或str的最简单案例
2021/01/13 Python
AmazeUI 折叠面板的实现代码
2020/08/17 HTML / CSS
美国购买舞会礼服网站:Couture Candy
2019/12/29 全球购物
Belstaff英国官方在线商店:Belstaff.co.uk
2021/02/09 全球购物
教师自我鉴定
2013/12/13 职场文书
大学军训感言300字
2014/03/09 职场文书
2014县政府领导班子三严三实对照检查材料思想汇报
2014/09/26 职场文书
倡议书作文
2015/01/19 职场文书
民间借贷借条如何写
2015/05/26 职场文书