【问题标题】:multiple authentications on laravellaravel 中的多重身份验证
【发布时间】:2020-05-21 12:30:59
【问题描述】:

我在 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);
    }
}

【问题讨论】:

    标签: php laravel


    【解决方案1】:

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

    因此,中间件CheckMaster仅在登录用户尝试进入特定路线时才会出现。

    如果你是用Auth\LoginController.php实现的,你可以在用户认证时覆盖authenticated函数,示例代码:

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

    【讨论】:

    • 我在同一个用户表上有两个登录页面 localhost/login 和 localhost/admin/login .....有没有办法通过说“这些凭据没有”来阻止来自 localhost/login 的主登录匹配' ...
    • 由于两个登录共享相同的登录功能,如果主用户从 /login 登录,重定向主用户重定向到主页面是没有害处的,但如果坚持这样做,您可以通过检查路由来玩这个把戏在经过身份验证的情况下,例如:if ($user->hasRole('master') && !$request->is('master/*')) auth()->logout($user) 然后重定向用户并显示错误消息
    猜你喜欢
    • 2018-07-21
    • 2018-10-17
    • 2016-12-19
    • 1970-01-01
    • 2019-05-14
    • 2015-08-21
    • 1970-01-01
    • 2015-05-26
    相关资源
    最近更新 更多