不知道对不对,乱来一下!!!!

 

1)laravel自带了一个用户认证系统,要使用的话,直接运行一下命令就可以用了

php artisan make:auth

会生成相应的控制器、路由和模版文件

 

2)数据迁移

php artisan migrate

会生成两个数据迁移文件和相应的数据表(users 和 password_resets 表)(要先配置好数据库连接)

 

3)多用户认证

如果只是需要完善一个用户资料字段,你只需要添加一个users表的数据迁移文件,再执行一下迁移就行了(看这里

但如果想添加更多不同类型的用户(比如后台用户、商家用户等等),要怎么办呢?

 

4)修改用户认证配置(增加“守卫”和“服务提供者”)

打开 config/auth.php 配置看一下就知道什么是“守卫”了

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
    ],
],

很明显,所谓的“守卫”就laravel认证系统的端口,默认已经有两个“守卫”了,一个守web进口的,一个守api接口进口的

现在如果想添加一个后台“守卫”的话,就增加一个配置就行了(driver 表示认证系统用什么来驱动,provider 表示认证服务由谁的提供)

'admin' => [
    'driver' => 'session',
    'provider' => 'admins',
],

上面配置了一个admins服务提供者,所以相应的,还需要在 providers(服务提供者)列表里添加一个配置

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
    
    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Admin::class,
    ],
],

 

5)配置是弄好,但提供服务的 Eloquent 模型还是不存在的,所以我们就来创建吧

php artisan make:model Admin --migration

--migration参数是同时生成相应的数据迁移文件的意思

 

Admin模型的内容大概是这样的:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use Illuminate\Support\Facades\Auth;

class AdminController extends Controller
{
    public function __construct(){
        $this->middleware('auth:admin');
    }

    public function index(){
        $user = Auth::user();
        dd($user->email);
        return '后台!!!!';
    }
}

关键的地方是 $this->middleware('auth:admin'),关键laravel你要用的“守卫”是admin,否则打印的 Auth::user 将会是默认的前台用户信息

 

6)按自己的需求填一下数据迁移文件,再执行一下迁移(生成数据表)(这里演示的偷懒了,直接复制前台的用户表来玩的)

Schema::create('admins', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('email')->unique();
    $table->string('password', 60);
    $table->rememberToken();
    $table->timestamps();
});
php artisan migrate

 

7)添加访问路由,laravel5.3的auth路由在 /vendor/laravel/framework/src/Illuminate/Routing/Router.php 里的 auth 方法里

继续偷懒,直接复制前台路由,加一个后台路由组就行了,大概是这个样子:

laravel 5.3 多用户认证

$this->group(['prefix'=>'admin', 'namespace'=>'Admin', 'middleware'=>'adminview'], function(){
      // Authentication Routes...
      $this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
      $this->post('login', 'Auth\LoginController@login');
      $this->post('logout', 'Auth\LoginController@logout')->name('logout');

      // Registration Routes...
      $this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
      $this->post('register', 'Auth\RegisterController@register');

      // Password Reset Routes...
      $this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm');
      $this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail');
      $this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm');
      $this->post('password/reset', 'Auth\ResetPasswordController@reset');
});

可以看到,上面路由组里定义使用了一个Admin的命名空间和一个adminview的中间件中间件的作用待会再说,我们先把命名空间下的控制器给搞定先~~

 

另外, routes/web.php 里一个后台前页的路由

Route::get('/admin','AdminController@index');

 

8)路由有了,但Admin命名空间下的路由还一个控制器还没有呢!!再再再偷懒,控制器也直接复制过去吧哈哈

laravel 5.3 多用户认证

 

LoginController 和 RegisterController 控制器里命名空间要改成

namespace App\Http\Controllers\Admin\Auth;

 

然后先说一下 RegisterController 控制器里的改动吧,有三处改动:

1、类头部把 use App\User 改成 use App\Admin;

2、redirectTo 属性值改成 protected $redirectTo = '/admin';

3、create 方法里把 User 模型改成 Admin 模型

 

完整的代码是这样的:

<?php

namespace App\Http\Controllers\Admin\Auth;

use App\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;

class RegisterController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Register Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users as well as their
    | validation and creation. By default this controller uses a trait to
    | provide this functionality without requiring any additional code.
    |
    */

    use RegistersUsers;

    /**
     * Where to redirect users after registration.
     *
     * @var string
     */
    protected $redirectTo = '/admin';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|confirmed',
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return User
     */
    protected function create(array $data)
    {
        return Admin::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);
    }
}
View Code

相关文章:

  • 2021-09-09
  • 2022-01-04
  • 2022-12-23
  • 2022-12-23
  • 2021-06-17
  • 2022-12-23
  • 2022-12-23
  • 2021-08-22
猜你喜欢
  • 2022-12-23
  • 2021-09-14
  • 2022-02-05
  • 2022-12-23
  • 2022-12-23
  • 2021-11-04
  • 2021-04-07
相关资源
相似解决方案