最近刚开始接触laravel框架,看了下用户认证这块,封装的比较全面
Auth 认证原理简述
Laravel 的认证是使用 guard
与 provider
配合完成, guard
负责认证的业务逻辑,认证信息的服务端保存等; provider
负责提供认证信息的持久化数据提供。
请求提交给 guard
, guard
从 provider
里取出数据(类似用户名、密码等),验证输入数据与服务器端存储的数据是否吻合。如果提交的数据正确,再做 session 等业务的处理(如有需要)。
在一个新的 Laravel 应用程序中运行
php artisan make:auth
php artisan migrate
这两个命令将负责构建整个认证系统(users用户表)
现在新增admins用户表用户认证
修改 Auth 认证的配置文件 config/auth.php()
在 gurads 处,添加 admin
guard 用于后台管理员认证
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'admin' => [ 'driver' => 'session', 'provider' => 'admins', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', ], ],
在 providers 处添加 admins
provider,使用 Admin
模型
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
],
],
创建后台管理员模型
我们再创建一个 Admin
模型,用于后台管理员登录验证。
php artisan make:model Admin -m
-m 参数会同时生成数据库迁移文件 xxxx_create_admins_table
修改 app/Admin.php
模型文件
<?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', 'password',
];/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}
编辑 xxxx_create_admins_table
文件,后台管理员模型结构与前台用户差不多,去掉 email
字段,name
字段设为 unique
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;class CreateAdminsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('admins', function (Blueprint $table) {
$table->increments('id');
$table->string('name')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
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
文件。
php artisan make:seeder AdminsTableSeeder
编辑 database/seeds/AdminsTableSeeder.php
文件的 run
方法,添加3个管理员用户,密码为 123456
public function run() { factory('App\Admin', 3)->create([ 'password' => bcrypt('123456') ]); }
在 database/seeds/DatabaseSeeder.php
的 run
方法里调用 AdminsTableSeeder
类
public function run() { $this->call(AdminsTableSeeder::class); }
执行数据库迁移命令
php artisan migrate --seed
数据库里会创建 admins 表,并且生成了3条数据
创建后台页面
创建控制器
<