首页 > 解决方案 > laravel 上的多重身份验证

问题描述

我在 laravel 中在用户表上构建了一个身份验证系统。我必须在同一个用户表上为管理员和普通用户创建两个登录页面。我使用了 spatie 角色和权限,但它不会停止从普通用户登录页面进行管理员登录,反之亦然。

我添加了 checkmaster 中间件,只是为了接受我在 stackoverflow 上的问题。

namespace App\Http\Middleware;

use Closure;

class CheckMaster
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (\Auth::user()->hasRole('master')) {
            return $next($request);
        }
        return redirect('home');
        return $next($request);
    }
}

标签: phplaravel

解决方案


仅当用户尝试进入特定路线时,中间件才起作用。

因此,中间件CheckMaster只有在登录用户尝试进入某个路线时才会发生。

如果您使用 实现Auth\LoginController.php,您可以在用户通过身份验证时覆盖该函数authenticated,示例代码:

protected function authenticated(Request $request, $user)
{
    if ($user->hasRole('master')) {
        return redirect('master-home');
    }

    return redirect('home');
}

推荐阅读