【问题标题】:How do I validate User role on Laravel 5.8s Built in Authentication?如何在 Laravel 5.8s 内置身份验证中验证用户角色?
【发布时间】:2019-10-30 04:27:04
【问题描述】:

我的用户表上有一个用户角色列。

  • 代表超级管理员,
  • 代表其他用户

我查看了很多 Laravel 教程,但都没有帮助我解决这个问题。

我找到了一些方法,比如替换整个 Laravel 的 Login Controller 并用我们自己的替换 Authenticate Users trait。我想用最少的代码更改来解决我的问题。可能吗?

如何在此 Trait 方法中以最少的代码更改来实现它?

public function login(Request $request)
{
    $this->validateLogin($request);


    if (method_exists($this, 'hasTooManyLoginAttempts') &&
        $this->hasTooManyLoginAttempts($request)) {
        $this->fireLockoutEvent($request);

        return $this->sendLockoutResponse($request);
    }

    if ($this->attemptLogin($request)) {
        return $this->sendLoginResponse($request);
    }


    $this->incrementLoginAttempts($request);

    return $this->sendFailedLoginResponse($request);
}

【问题讨论】:

  • 您要验证什么?角色字段是必需的吗?
  • 我想检查用户是否有赋予角色 1。我找到了解决方案:D
  • 但是如何更改“这些凭据与我们的记录不匹配”。而是显示“只允许超级管理员”?
  • 检查thisthis

标签: laravel login laravel-5.8 laravel-authentication


【解决方案1】:

您可以做一些超级简单的事情,例如将 isSuperAdmin 函数添加到 User 模型中。登录后,您只需在需要检查时对用户调用此函数。

在 User.php 模型中

  public function isSuperAdmin()
  {
      return $this->user_role == 1;
  }

那么你也可以制作一个使用这个函数的中间件。

php artisan make:middleware SuperAdmin

在这个中间件的句柄函数中(app/http/middleware/SuperAdmin.php):

public function handle($request, Closure $next)
{
    if (Auth::check() && Auth::user()->isSuperAdmin()) {
        return $next($request);
    }
    return redirect('some-route-for-unauthorized-users');

}

然后在你的路由(可能是 web.php)中,你可以使用这个中间件来保护路由:

Route::group(['middleware' => ['auth', 'superadmin']], function () {
    ... put protected routes here ...
});

【讨论】:

    【解决方案2】:

    解决方案

            /**
             * Create a new controller instance.
             *
             * @return void
             */
            public function __construct() {
                $this->middleware('guest')->except('logout');
            }
    
            protected function credentials(Request $request)
            {
                $credentials = $request->only($this->username(), 'password');
                $credentials['role'] = '1';
                return $credentials;
            }
    

    【讨论】:

      猜你喜欢
      • 2016-09-23
      • 1970-01-01
      • 2016-11-29
      • 2016-08-21
      • 2021-03-10
      • 2013-05-16
      • 2015-01-09
      • 2016-11-03
      • 2015-05-31
      相关资源
      最近更新 更多