最近刚开始接触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条数据
创建后台页面
创建控制器
<
最低0.47元/天 解锁文章
271

被折叠的 条评论
为什么被折叠?



