准备工作:
1、下载laravel框架
2、配置好项目(数据库连接以及虚拟主机)

开始:
前台用户认证laravel已经为我们写好了,此部分可参考官方文档

创建模型(以adminstrator为例)

php artisan make:model Models/Adminstrator -m

编写administrator表迁移

Schema::create('administrators', function (Blueprint $table) {$table->engine = 'InnoDB';$table->increments('id');$table->string('login_name')->unique();$table->string('display_name')->nullable();$table->string('password');$table->string('avatar')->nullable();$table->rememberToken();$table->tinyInteger('status')->default(1);$table->timestamps();
});

编写administrator模型

<?phpnamespace App\Models;use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;class Administrator extends Model implements AuthenticatableContract
{use Authenticatable;protected $fillable = ['login_name', 'password'];protected $hidden = ['password', 'remember_token'];
}

创建后台配置文件admin.php,在return数组中写入

'auth' => ['guards' => ['administrator' => ['driver'   => 'session','provider' => 'administrators',],],'providers' => ['administrators' => ['driver' => 'eloquent','model'  => \App\Models\Administrator::class,],],
],

创建后台用户认证中间件Authenticate,运行:

php artisan make:middleware Admin/Authenticate

修改handle方法:

<?php/*** 用户认证中间件*/namespace App\Http\Middleware\Admin;use Closure;
use Illuminate\Support\Facades\Auth;class Authenticate
{/*** Handle an incoming request.** @param  \Illuminate\Http\Request  $request* @param  \Closure  $next* @return mixed*/public function handle($request, Closure $next){if (Auth::guard('administrator')->guest() && !$this->shouldPassThrough($request)) {return redirect()->guest(admin_base_path('login'));}return $next($request);}/*** Determine if the request has a URI that should pass through verification.** @param \Illuminate\Http\Request $request** @return bool*/protected function shouldPassThrough($request){$excepts = [admin_base_path('login'),admin_base_path('logout'),];foreach ($excepts as $except) {if ($except !== '/') {$except = trim($except, '/');}if ($request->is($except)) {return true;}}return false;}
}

创建AdminServiceProvider,运行:

php artisan make:provider AdminServiceProvider

编写:

<?phpnamespace App\Providers;use Illuminate\Support\ServiceProvider;class AdminServiceProvider extends ServiceProvider
{/*** 路由中间件* @var array*/protected $routeMiddleware = ['admin.auth' => \App\Http\Middleware\Admin\Authenticate::class,'admin.pjax' => \Spatie\Pjax\Middleware\FilterIfPjax::class,'admin.log' => \App\Http\Middleware\Admin\LogOperation::class,];/*** 中间件组* @var array*/protected $middlewareGroups = ['admin' => ['admin.auth','admin.pjax','admin.log',],];/*** Bootstrap services.** @return void*/public function boot(){if (file_exists($routes = base_path('routes/admin.php'))) {$this->loadRoutesFrom($routes);}}/*** Register services.** @return void*/public function register(){$this->loadAdminAuthConfig();$this->registerRouteMiddleWare();}/*** 注册路由中间件*/public function registerRouteMiddleWare(){// 注册路由中间件foreach ($this->routeMiddleware as $key => $middleware) {app('router')->aliasMiddleware($key, $middleware);}// 注册路由中间件组foreach ($this->middlewareGroups as $key => $middleware) {app('router')->middlewareGroup($key, $middleware);}}/*** Setup auth configuration.** @return void*/protected function loadAdminAuthConfig(){config(array_dot(config('admin.auth', []), 'auth.'));}
}

config/app.php中注册provider和facades

'providers' => [...,App\Providers\AdminServiceProvider::class,
]'aliases' => [...,'Admin' => App\Facades\Admin\Admin::class,
]

创建登录表单验证类,运行:

php artisan make:request AdministratorLoginRequest

重写其父类rulesmessages方法:

<?phpnamespace App\Http\Requests;use Illuminate\Foundation\Http\FormRequest;class AdministratorLoginRequest extends FormRequest
{/*** Determine if the user is authorized to make this request.** @return bool*/public function authorize(){return true;}/*** Get the validation rules that apply to the request.** @return array*/public function rules(){return ['login_name' => 'required','password' => ['required', 'min:6'] //密码必须,最小长度为6];}public function messages(){return ['login_name.required' => '请输入用户名','password.required' => '请输入密码','password.min' => '密码至少6位',];}
}

创建登录控制器,运行:

php artisan make:controller Admin/Auth/LoginController

编写登录方法:

<?phpnamespace App\Http\Controllers\Admin\Auth;use App\Http\Requests\AdministratorLoginRequest;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;class LoginController extends Controller
{/*** 登录表单* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View*/public function getLoginForm(){if (!Auth::guard('administrator')->guest()) {return redirect(config('admin.route.prefix'));}return view(admin_view_base_path('auth.login.index'));}/*** 登录操作* @param AdministratorLoginRequest $loginRequest* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector*/public function postLogin(AdministratorLoginRequest $loginRequest){$postData = $loginRequest->only('login_name', 'password', 'remember');$result = Auth::guard('administrator')->attempt($postData, $loginRequest->filled('remember'));if ($result) {admin_toast('登录成功');$loginRequest->session()->regenerate();return redirect()->intended(config('admin.route.prefix'));}else{return redirect()->back()->withInput()->withErrors(['login_name' => '用户名或密码错误']);}}/*** 注销登录* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector*/public function postLogout(){Auth::guard('administrator')->logout();session()->forget('url.intented');return redirect(config('admin.route.prefix'));}
}

至此,认证业务已经完成,接下来进行完善,使系统能够跑起来

创建视图文件(ps:1、控制器中使用的admin_view_base_path为自定义函数,指向后台视图文件主目录。2、视图采用AdminLTE框架)
login.blade:form

<form action="{{ admin_base_path('login') }}" method="post">@csrf<div class="form-group has-feedback"><input type="text" class="form-control {{ $errors->has('login_name') ? ' is-invalid' : '' }}"placeholder="登 录 名" name="login_name" value="{{ old('login_name') }}" required autofocus><span class="glyphicon glyphicon-envelope form-control-feedback"></span>@if ($errors->has('login_name'))<span class="invalid-feedback"><strong class="text-danger">{{ $errors->first('login_name') }}</strong></span>@endif</div><div class="form-group has-feedback"><input type="password" class="form-control {{ $errors->has('password') ? ' is-invalid' : '' }}"placeholder="密 码" name="password" required><span class="glyphicon glyphicon-lock form-control-feedback"></span>@if ($errors->has('password'))<span class="invalid-feedback"><strong class="text-danger">{{ $errors->first('password') }}</strong></span>@endif</div><div class="row"><div class="col-xs-8"><div class="checkbox icheck"><label><input type="checkbox" name="remember" {{ old('remember') ? 'checked' : '' }}> 记住我</label></div></div><!-- /.col --><div class="col-xs-4"><button type="submit" class="btn btn-primary btn-block btn-flat">登 录</button></div><!-- /.col --></div></form>

创建后台home控制器,运行:

php artisan make:controller Admin/Home/HomeController

编写index方法返回视图

<?phpnamespace App\Http\Controllers\Admin\Home;use Illuminate\Http\Request;
use App\Http\Controllers\Controller;class HomeController extends Controller
{//public function index(){return view(admin_view_base_path('home.index'));}}

若仅作登录之后跳转测试,home视图中保留注销按钮即可,例:
home.blade

<div class="pull-right"><a class="btn btn-default btn-flat" href="/admin/logout"onclick="event.preventDefault();document.getElementById('logout-form').submit();">{{ __('注 销') }}</a>
</div><form id="logout-form" class="hide" action="{{ admin_base_path('logout') }}" method="POST" style="display: none;">@csrf
</form>

编辑配置文件config.admin.php,加入以下配置:

'route' => ['prefix' => 'admin','namespace' => 'App\\Http\\Controllers\\Admin','middleware' => ['web', 'admin'],
],

编写路由文件routes/admin.php

<?phpuse Illuminate\Routing\RouterRoute::group(['prefix'        => config('admin.route.prefix'),'namespace'     => config('admin.route.namespace'),'middleware'    => config('admin.route.middleware'),
], function (Router $router) {$router->get('/', 'Home\HomeController@index');$router->get('login', 'Auth\LoginController@getLoginForm');$router->post('login', 'Auth\LoginController@postLogin');$router->post('logout', 'Auth\LoginController@postLogout');
});

数据表迁移与填充: 修改database/seeds/DatabaseSeeder

<?phpuse Illuminate\Database\Seeder;class DatabaseSeeder extends Seeder
{/*** Seed the application's database.** @return void*/public function run(){// $this->call(UsersTableSeeder::class);DB::table('administrators')->insert(['login_name' => 'admin','display_name' => '超级管理员','password' => bcrypt('123456'),'created_at' => date('Y-m-d H:i:s', time()),'updated_at' => date('Y-m-d H:i:s', time()),]);}
}

运行:

php artisan migrate //数据表迁移
php artisan db:seed //数据填充

如果前台使用了laravel框架用户认证的话,需要重写框架生成的LoginControllerlogout方法。防止前台用户注销的时候清除后台用户的session。(ps:框架自带用户认证在注销时会清空所有session)

/*** 重写前台注销操作* @param Request $request* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector*/
public function logout(Request $request)
{$this->guard()->logout();$request->session()->forget('uri.intented');return redirect('/');
}

至此,后台用户登录全部完成。enjoy it!

laravel框架学习之路(一)前后台用户认证分离相关推荐

  1. laravel database.php,php Laravel框架学习(一) 之 建立数据库并填充测试数据

    php Laravel框架学习(一) php Laravel框架学习之Laravel 建立数据库并填充测试数据 建立数据库 前面我们已经明确目标网站的基本功能,现在我们先来建立它的数据库. 设计数据库 ...

  2. Laravel 5.5 使用 Jwt-Auth 实现 API 用户认证、刷新令牌(一)

    需求: 新项目,采用前后端分离的模式,前端使用 Vue.js,后端使用 Laravel 5.5构建 Api 服务,用户认证的包使用 jwt-auth .本次博客会分4步完成, Laravel 5.5 ...

  3. Laravel框架学习

    前言: 首先,了解 Laravel 的核心概念是非常重要的.Laravel 使用了现代化的 MVC(模型-视图-控制器)架构模式,这有助于将代码逻辑分离,提高应用的可维护性和可扩展性.同时,Larav ...

  4. Laravel框架学习笔记(一)——phpstudy下的安装配置

    2019独角兽企业重金招聘Python工程师标准>>> 网上关于如何安装laravel框架的教程很多,就不多说了,推荐大家去看http://www.golaravel.com/里的教 ...

  5. php laravel 教程,Laravel框架学习之新手教程

    本篇文章主要讲述了新手学习laravel的过程中必须要了解的事项,具有一定的参考价值准备学习laravel框架的朋友一定不能错过哦,希望看完能对你有所帮助. 一.Laravel环境搭建 1.windo ...

  6. Laravel 5.5 使用 Jwt-Auth 实现 API 用户认证以及无痛刷新访问令牌

    最近在做一个公司的项目,前端使用 Vue.js,后端使用 Laravel 构建 Api 服务,用户认证的包本来是想用 Laravel Passport 的,但是感觉有点麻烦,于是使用了 jwt-aut ...

  7. Spring Boot基础学习笔记21:自定义用户认证

    文章目录 零.学习目标 一.Spring Security认证流程图 二.准备工作 (一)创建Spring Boot项目 - AuthenticationDemo (二)移植SpringSecurit ...

  8. 高通WLAN框架学习(1)- -WIFI的认证和log的抓取

    本章节主要学习下高通WIFI的认证和log的抓取 1.WLAN的基本描述 本博客主要介绍下高通WLAN的概述,涵盖了可用于WLAN以及WLAN.蓝牙和LTE共存的调试方法. 还说明了软件调试可用的配置 ...

  9. Laravel框架学习 -- php artisan down/up

    为什么80%的码农都做不了架构师?>>>    由于某种原因,公司整体框架由python的flask框架,转换为php的laravel.在断断续续几个月的时间里,边继续写着flask ...

最新文章

  1. oracle 表结构语句,oracle查询表结构语句
  2. LINQ to SQL学习的几个问题
  3. weakhashmap_Java WeakHashMap putAll()方法与示例
  4. org.apache.hadoop.security.AccessControlException: Permission denied: user=anonymous, access=EXECUTE
  5. java+路径拦截实现_SpringBoot实现拦截器
  6. 管理项目的问题跟踪器的提示
  7. linus为什么开源_Linus Torvalds谈个性崇拜,美国最好的开源学校等等
  8. 大数据学习笔记53:Flume Sink Processors(Flume接收器处理器)
  9. 颗粒状糖果(巧克力)包装机设计
  10. Flash cs4 for mac 序列号。
  11. php 做批量打印二维码,php语言开发的网站,如何实现批量打印快递单的功能?
  12. [ github ] 10道题串起 Pandas 常用知识点
  13. opencv 脸部识别开源软件
  14. Redis的Java客户端
  15. 百度谷歌一起搜 - 百Google度 - Chrome插件2
  16. 小眼睛适合大框还是小框眼镜_小眼睛合适什么眼镜框 这个禁忌千万不要犯
  17. 浙江江西公费出国游黑幕调查
  18. stm32 hid 双向通信
  19. 参加老同学蒋坤元新书发布会(4)
  20. 诺基亚n78微信显示服务器忙,诺基亚N78系统详细解析

热门文章

  1. mahout0.7 示例运行纪实
  2. 使用 Microsoft.UI.Xaml 解决 UWP 控件和对老版本 Windows 10 的兼容性问题
  3. 第四:Python发送邮件时实现生成测试报告/邮件自动发送
  4. 《手把手教你》系列基础篇之2-python+ selenium自动化测试-打开和关闭浏览器(详细)
  5. cordova build android很慢,cordova build --release android命令打包下载gradle非常慢的问题...
  6. c 语言转换成java语言,求助大神!!!JAVA转换成C语言
  7. [Teamcenter 2007 开发实战] 获取错误或提示信息
  8. debian dhcp服务启动不了_网刻批量装系统pxe启动教程全自动分区装系统
  9. 基数排序(也叫桶子排序)
  10. Mysql在sql中截取时间类型字段的年月日和时间-DATE_FORMAT() 函数