【问题标题】:multi auth laravel 5.6 step by step for beginner初学者的多身份验证 laravel 5.6 一步一步
【发布时间】:2018-09-08 08:11:42
【问题描述】:

有人可以帮助我如何在 laravel 5.6 中进行多重身份验证,我已经阅读了这个 How to create multi auth in laravel 5.6? 但仍然无法理解。请帮助我。

【问题讨论】:

  • 您好,欢迎您,也许这会有所帮助:hackernoon.com/laravel-multiple-authentication-80daa855322b
  • multi auth laravel 5.5 和 5.6 有什么不同?
  • 差别不大,也许在你去尝试之前,先了解一下中间件和如何创建认证系统,然后尝试多认证的东西
  • 谢谢大佬,我先学了

标签: laravel authentication laravel-5.6


【解决方案1】:

这家伙太棒了...我学会了如何通过这个 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

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 应用于管理模型

App/Admin.php

protected $guard = 'admin’;

制作 AdminContoller

复制 HomeController -> AdminController

App/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 登录

app/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

App/Exceptions/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 。

App/Http/Middleware/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

希望对你有帮助:)

【讨论】:

  • 我有 wacth ,那是 laravel 5.4 的,但我再试一次,希望它有效 :)。谢谢人
猜你喜欢
  • 2011-02-09
  • 1970-01-01
  • 2019-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多