多功能验证laravel 5.6一步一步为初学者

问题描述 投票:0回答:1

谁能帮助我如何在laravel 5.6中制作多种身份验证,我已经读过这个How to create multi auth in laravel 5.6?但仍然无法理解。请帮助我。

laravel authentication laravel-5.6
1个回答
0
投票

这家伙摇滚...我学会了如何使用这个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();
    });
}

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

user.php的

admin.php的

在auth.php中为Admin保护

配置/ 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.php的

protected $guard = 'admin’;

制作AdminContoller

复制HomeController - > AdminController

应用程序/ HTTP /控制器/ AdminController.php

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

制作AdminLoginController

php artisan make:controller Auth/AdminLoginController

制作管理员登录视图

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

资源/视图/管理,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 /控制器/认证/ 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

希望能帮助到你 :)

© www.soinside.com 2019 - 2024. All rights reserved.