|
Laravel5.3不同用户表登陆认证
简介
Laravel5.3的Auth认证在5.2的基础上又有一些改变,本文说明如何在Laravel5.3下做不同用户表的登陆认证。
Auth认证原理简述
Laravel的认证是使用guard与provider配合完成,guard负责认证的业务逻辑,认证信息的服务端保存等;provider负责提供认证信息的持久化数据提供。
请求提交给guard,guard从provider里取出数据(类似用户名、密码等),验证输入数据与服务器端存储的数据是否吻合。如果提交的数据正确,再做session等业务的处理(如有需要)。
认证脚手架
首先我们导入Laravel的自带的认证脚手架
phpartisanmake:auth
执行数据库迁移:
phpartisanmigrate
修改Auth认证的配置文件config/auth.php
在gurads处,添加adminguard用于后台管理员认证
''guards''=>[
''web''=>[
''driver''=>''session'',
''provider''=>''users'',
],
''admin''=>[
''driver''=>''session'',
''provider''=>''admins'',
],
''api''=>[
''driver''=>''token'',
''provider''=>''users'',
],
],
在providers处添加adminsprovider,使用Admin模型
''providers''=>[
''users''=>[
''driver''=>''eloquent'',
''model''=>App\User::class,
],
''admins''=>[
''driver''=>''eloquent'',
''model''=>App\Admin::class,
],
],
创建后台管理员模型
我们再创建一个Admin模型,用于后台管理员登陆验证。
phpartisanmake:modelAdmin-m
-m参数会同时生成数据库迁移文件xxxx_create_admins_table
修改app/Admin.php模型文件
namespaceApp;
useIlluminate\Notifications\Notifiable;
useIlluminate\Foundation\Auth\UserasAuthenticatable;
classAdminextendsAuthenticatable
{
useNotifiable;
/
Theattributesthataremassassignable.
@vararray
/
protected$fillable=[
''name'',''password'',
];
/
Theattributesthatshouldbehiddenforarrays.
@vararray
/
protected$hidden=[
''password'',''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(''admins'',function(Blueprint$table){
$table->increments(''id'');
$table->string(''name'')->unique();
$table->string(''password'');
$table->rememberToken();
$table->timestamps();
});
}
/
Reversethemigrations.
@returnvoid
/
publicfunctiondown()
{
Schema::dropIfExists(''admins'');
}
}
管理员模型填充数据
定义一个数据模型工厂,在database/factories/ModelFactory.php中添加如下代码
$factory->define(App\Admin::class,function(Faker\Generator$faker){
static$password;
return[
''name''=>$faker->firstName,
''password''=>$password?:$password=bcrypt(''secret''),
''remember_token''=>str_random(10),
];
});
使用Faker随机填充用户名
在database/seeds目录下生成AdminsTableSeeder.php文件。
phpartisanmake:seederAdminsTableSeeder
编辑database/seeds/AdminsTableSeeder.php文件的run方法,添加3个管理员用户,密码为123456
publicfunctionrun()
{
factory(''App\Admin'',3)->create([
''password''=>bcrypt(''123456'')
]);
}
在database/seeds/DatabaseSeeder.php的run方法里调用AdminsTableSeeder类
publicfunctionrun()
{
$this->call(AdminsTableSeeder::class);
}
执行数据库迁移命令
phpartisanmigrate--seed
数据库里会创建admins表,并且生成了3条数据
创建后台页面
创建控制器
phpartisanmake:controllerAdmin/LoginController
phpartisanmake: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.
@returnvoid
/
publicfunction__construct()
{
$this->middleware(''guest.admin'',[''except''=>''logout'']);
}
/
显示后台登陆模板
/
publicfunctionshowLoginForm()
{
returnview(''admin.login'');
}
/
使用adminguard
/
protectedfunctionguard()
{
returnauth()->guard(''admin'');
}
/
重写验证时使用的用户名字段
/
publicfunctionusername()
{
return''name'';
}
}
编辑Admin/IndexController.php
namespaceApp\Http\Controllers\Admin;
useIlluminate\Http\Request;
useApp\Http\Requests;
useApp\Http\Controllers\Controller;
classIndexControllerextendsController
{
/
显示后台管理模板首页
/
publicfunctionindex()
{
returnview(''admin.index'');
}
}
后台显示模板
复制views/layouts/app.blade.php成views/layouts/admin.blade.php
编辑后台管理布局模板
{{config(''app.name'',''Laravel'')}}-Admin
ToggleNavigation
{{config(''app.name'',''Laravel'')}}
@if(auth()->guard(''admin'')->guest())
Login
@else
{{Auth::user()->name}}
onclick="event.preventDefault();
document.getElementById(''logout-form'').submit();">
Logout
{{csrf_field()}}
@endif
@yield(''content'')
| | |