laravel多用户认证

最近刚开始接触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条数据

 

创建后台页面

创建控制器

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值