首页 > 解决方案 > 初学者的多身份验证 laravel 5.6 一步一步

问题描述

有人可以帮我如何在 laravel 5.6 中进行多重身份验证,我已经阅读了这篇如何在 laravel 5.6 中创建多重身份验证? 但仍然无法理解。请帮助我。

标签: laravelauthenticationlaravel-5.6

解决方案


这家伙摇滚......我学会了如何使用这个 youtube 视频进行多重身份验证,它有点长,但如果你想要的话,它肯定会让你为管理员和用户进行身份验证。

https://www.youtube.com/watch?v=iKRLrJXNN4M&list=PLwAKR305CRO9S6KVHMJYqZpjPzGPWuQ7Q

这是我为本教程视频制作的备忘单。当您厌倦了在视频上输入所有内容时,请参考它。但是,我强烈建议观看视频,仅看这些说明可能还不够。

基本身份验证和管理模型

php artisan make:auth

php artisan make:migration create_admins_table --create=admins

数据库/迁移/???_create_admins_table.php

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

将用户模型复制到管理员模型

用户.php

管理员.php

在 auth.php 中保护管理员

配置/auth.php

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'api' => [
        'driver' => 'token',
        'provider' => 'users',
    ],
    'admin' => [
        'driver' => 'session',
        'provider' => 'admins',
    ],
    'admin-api' => [
        'driver' => 'token',
        'provider' => 'admins',
    ],
],
**Create provider for Admin**
'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Admin::class,
    ]
],
**Create password resets for admin**
'passwords' => [
    'users' => [
        'provider' => 'users',
        'table' => 'password_resets',
        'expire' => 60,
    ],
    'admins' => [
        'provider' => 'admins',
        'table' => 'password_resets',
        'expire' => 60,
    ],
],

将 Admin Guard 应用于 admin 模型

应用程序/Admin.php

protected $guard = 'admin’;

制作管理员控制器

复制 HomeController -> AdminController

应用程序/Http/Controllers/AdminController.php

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

制作 AdminLoginController

php artisan make:controller Auth/AdminLoginController

制作管理员登录视图

重复 login.blade.php -> admin-login.blade.php

资源/视图/admin-login.blade.php

登录 -> 管理员登录

route(‘login’) -> route(‘admin.login.submit’)

管理员路由设置

路线/web.php

Route::prefix('admin')->group(function() {
    Route::get('/', 'AdminController@index’)->name(‘admin.dashboard');
    Route::get('/login', 'Auth\AdminLoginController@showLoginForm')->name('admin.login');
    Route::post('/login', 'Auth\AdminLoginController@login')->name('admin.login.submit');
});

使 AdminLoginController 登录

应用程序/http/controllers/Auth/AdminLoginController.php

public function __construct()
{
    $this->middleware('guest:admin', ['except' => ['logout']]);
}

public function showLoginForm()
{
    return view('auth.admin-login');
}

public function login(Request $request)
{
    // Validate the form adata
    $this->validate($request, [
        'email' => 'required|email',
        'password' => 'required|min:6'
    ]);
    //Attempt to log the user in
    if (Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password], $request->remember)) {
        //if sucessful, the redirect to their
        return redirect()->intended(route('admin.dashboard'));
    }
    //if unseccessful
    return redirect()->back()->withInput($request->only('email', 'remember'));
}

public function logout()
{
    Auth::guard('admin')->logout();
    return redirect('/');
}

解决重定向错误 1

  • /admin 导致 /login 时出错
  • 使用异常处理程序解决它。未认证状态下,当guard为admin时,重定向到/admin/login,其他情况,重定向到/login

应用程序/异常/Handler.php

protected function unauthenticated($request, AuthenticationException $exception)
{
    if ($request->expectsJson()) {
        return response()->json(['error' => 'unauthenticated'], 401);
    }

    $guard = array_get($exception->guards(),0);

    switch ($guard) {
        case 'admin':
            $login = 'admin.login';
            break;
        default:
            $login = 'login';
            break;
    }

    return redirect()->guest(route($login));
}

解决重定向错误 2

  • 受访客中间件保护的页面仅指向 /home
  • 以用户身份登录时,输入/admin 将重定向到/home,这是由于仅识别guest:user 引起的。因此,我们应该修复 RedirectIfAuthenticated 以便我们的应用程序也可以识别 guest:admin 。

应用程序/Http/中间件/RedirectIfAuthenticated

public function handle($request, Closure $next, $guard = null)
{
    switch($guard) {
        case 'admin':
            if(Auth::guard($guard)->check()) {
                return redirect()->route('admin.dashboard');
            }
            break;
        default:
            if(Auth::guard($guard)->check()) {
                return redirect()->route('/home');
            }
    }

    return $next($request);
}

更新 laravel 项目的配置缓存

php artisan config:cache

希望能帮助到你 :)


推荐阅读