Laravel 53 不同用户表登陆认证Word文件下载.docx
《Laravel 53 不同用户表登陆认证Word文件下载.docx》由会员分享,可在线阅读,更多相关《Laravel 53 不同用户表登陆认证Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
创建后台管理员模型
我们再创建一个Admin模型,用于后台管理员登陆验证。
modelAdmin-m
-m参数会同时生成数据库迁移文件xxxx_create_admins_table
修改app/Admin.php模型文件
<
?
php
namespaceApp;
useIlluminate\Notifications\Notifiable;
useIlluminate\Foundation\Auth\UserasAuthenticatable;
classAdminextendsAuthenticatable
{
useNotifiable;
/**
*Theattributesthataremassassignable.
*
*@vararray
*/
protected$fillable=[
name'
'
password'
];
*Theattributesthatshouldbehiddenforarrays.
protected$hidden=[
remember_token'
}
编辑xxxx_create_admins_table文件,后台管理员模型结构与前台用户差不多,去掉email字段,name字段设为unique
useIlluminate\Support\Facades\Schema;
useIlluminate\Database\Schema\Blueprint;
useIlluminate\Database\Migrations\Migration;
classCreateAdminsTableextendsMigration
*Runthemigrations.
*@returnvoid
publicfunctionup()
{
Schema:
create('
function(Blueprint$table){
$table->
increments('
id'
);
string('
)->
unique();
rememberToken();
timestamps();
});
}
*Reversethemigrations.
publicfunctiondown()
dropIfExists('
管理员模型填充数据
定义一个数据模型工厂,在database/factories/ModelFactory.php中添加如下代码
$factory->
define(App\Admin:
class,function(Faker\Generator$faker){
static$password;
return[
$faker->
firstName,
$password?
$password=bcrypt('
secret'
),
str_random(10),
});
使用Faker随机填充用户名
在database/seeds目录下生成AdminsTableSeeder.php文件。
seederAdminsTableSeeder
编辑database/seeds/AdminsTableSeeder.php文件的run方法,添加3个管理员用户,密码为123456
publicfunctionrun()
factory('
App\Admin'
3)->
create([
bcrypt('
123456'
)
]);
在database/seeds/DatabaseSeeder.php的run方法里调用AdminsTableSeeder类
$this->
call(AdminsTableSeeder:
class);
执行数据库迁移命令
phpartisanmigrate--seed
数据库里会创建admins表,并且生成了3条数据
创建后台页面
创建控制器
controllerAdmin/LoginController
controllerAdmin/IndexController
其中,Admin/LoginController负责登陆逻辑;
Admin/IndexController管理登陆后的首页。
编辑Admin/LoginController.php
namespaceApp\Http\Controllers\Admin;
useApp\Http\Controllers\Controller;
useIlluminate\Foundation\Auth\AuthenticatesUsers;
classLoginControllerextendsController
/*
|--------------------------------------------------------------------------
|LoginController
|
|Thiscontrollerhandlesauthenticatingusersfortheapplicationand
|redirectingthemtoyourhomescreen.Thecontrollerusesatrait
|toconvenientlyprovideitsfunctionalitytoyourapplications.
useAuthenticatesUsers;
*Wheretoredirectusersafterlogin/registration.
*@varstring
protected$redirectTo='
/admin'
;
*Createanewcontrollerinstance.
publicfunction__construct()
middleware('
guest.admin'
['
except'
logout'
]);
*显示后台登陆模板
publicfunctionshowLoginForm()
returnview('
admin.login'
*使用adminguard
protectedfunctionguard()
returnauth()->
guard('
*重写验证时使用的用户名字段
publicfunctionusername()
return'
编辑Admin/IndexController.php
useIlluminate\Http\Request;
useApp\Http\Requests;
classIndexControllerextendsController
*显示后台管理模板首页
publicfunctionindex()
admin.index'
后台显示模板
复制views/layouts/app.blade.php成views/layouts/admin.blade.php
编辑后台管理布局模板
!
DOCTYPEhtml>
htmllang="
en"
>
head>
<
metacharset="
utf-8"
metahttp-equiv="
X-UA-Compatible"
content="
IE=edge"
metaname="
viewport"
width=device-width,initial-scale=1"
--CSRFToken-->
csrf-token"
{{csrf_token()}}"
title>
{{config('
app.name'
Laravel'
)}}-Admin<
/title>
--Styles-->
linkhref="
/css/app.css"
rel="
stylesheet"
--Scripts-->
script>
window.Laravel=<
phpecho[
csrfToken'
csrf_token(),
?
/script>
/head>
body>
navclass="
navbarnavbar-defaultnavbar-static-top"
divclass="
container"
navbar-header"
--CollapsedHamburger-->
buttontype="
button"
class="
navbar-togglecollapsed"
data-toggle="
collapse"
data-target="
#app-navbar-collapse"
spanclass="
sr-only"
ToggleNavigation<
/span>
icon-bar"
/button>
--BrandingImage-->
aclass="
navbar-brand"
href="
{{url('
/'
)}}"
{{config('
)}}
/a>
/div>
collapsenavbar-collapse"
id="
app-navbar-collapse"
--LeftSideOfNavbar-->
ulclass="
navnavbar-nav"
&
nbsp;
/ul>
--RightSideOfNavbar-->
navnavbar-navnavbar-right"
--AuthenticationLinks-->
@if(auth()->
guest())
li>
ahref="
/admin/login'
Login<
/li>
@else
liclass="
dropdown"
#"
dropdown-toggle"
role="
aria-expanded="
false"
{{Auth:
user()->
name}}<
caret"
dropdown-menu"
menu"
/logout'
onclick="
event.preventDefault();
document.getElementById('
logout-form'
).submit();
"
Logout
formid="
logout-form"
action="
method="
POST"
style="
display:
none;
{{csrf_field()}}
/form>
@endif
/nav>
@yield('
content'
scriptsrc="
/js/app.js"
/body>
/html>
复制views/auth/login.blade.php成views/admin/login.blade.php
编辑该模板,更改布局文件为layouts.admin,把表单的提交url改为admin/login,email字段改成name字段,去掉找回密码的部分
@extends('
layouts.admin'
@section('
row"
col-md-8col-md-offset-2"
panelpanel-default"
panel-heading"
AdminLogin<
panel-body"
formclass="
form-horizontal"
form"
form-group{{$errors->
has('
)?
has-error'
:
'
}}"
labelfor="
name"
col-md-4control-label"
Name<
/label>
col-md-6"
inputid="
type="
text"
form-control"
name="
value="
{{old('
requiredautofocus>
@if($errors->
))
help-block"
strong>
{{$errors->
first('
)}}<
/strong>
password"
Password<
required>
form-group"
col-md-6col-md-offset-4"
checkbox"
label>
inputtype="
remember"
RememberMe
col-md-8col-md-offset-4"
submit"
btnbtn-primary"
Login
@endsection
复制views/home.blade.php成views/admins/index.blade.php
编辑该模板
Dashboard<
Youareloggedinadmindashboard!
添加后台路由
编辑routes/web.php,添加以下内容
Route:
group(['
prefix'
],function(){
Route:
middleware'
auth.admin'
get('
Admin\IexController@index'
login'
Admin\LoginController@showLoginForm'
name('
post('
Admin\LoginController@login'
Admin\LoginController@logout'
后台管理认证中间件
创建后台管理认证中间件
middlewareAuthAdmin
编辑AuthAdmin
namespaceApp\Http\Middleware;
useClosure;
classAuthAdmin
*Handleanincomingrequest.
*@param\Illuminate\Http\Request$request
*@param\Closure$next
*@returnmixed
publicfunctionhandle($request,Closure$next)
if(auth()->
guest()){
if($request->
ajax()||$request->
wantsJson()){
returnresponse('
Unauthorized.'
401);
}else{
returnredirect()->
guest('
admin/