Authentication Laravel 5-根据两个表进行身份验证

Authentication Laravel 5-根据两个表进行身份验证,authentication,laravel-5.3,Authentication,Laravel 5.3,我对Laravel有些陌生,在以我想要的方式验证用户时遇到了一些问题。我的数据库中目前有一个用户表和一个公司表 我已经看到了许多基于用户是否是管理员的多个表进行身份验证的示例,但我希望通过以下方式对所有用户进行身份验证: 用户的电子邮件和密码匹配(用户表中的字段) 用户的状态当前处于活动状态(用户表中的字段) 用户所属公司的状态为活动的(公司表中的字段) 自从我发布这个问题以来,我一直在尽可能多地研究,最终得到了一个令人满意的解决方案。我不确定这是否是可能的最干净的方式,但它对我有效。如果其他人

我对Laravel有些陌生,在以我想要的方式验证用户时遇到了一些问题。我的数据库中目前有一个用户表和一个公司表

我已经看到了许多基于用户是否是管理员的多个表进行身份验证的示例,但我希望通过以下方式对所有用户进行身份验证:

  • 用户的
    电子邮件
    密码
    匹配(用户表中的字段)
  • 用户的
    状态当前处于活动状态(用户表中的字段)
  • 用户所属公司的状态为活动的
    (公司表中的字段)

  • 自从我发布这个问题以来,我一直在尽可能多地研究,最终得到了一个令人满意的解决方案。我不确定这是否是可能的最干净的方式,但它对我有效。如果其他人能从中受益,以下是我采取的步骤:

    1) 我在
    app\User.php
    model中添加了以下代码:

       # company / user relationship
       public function company() {
          return $this->belongsTo('App\Company', 'comp_id');
       }
    
       # determine if company is active
       public function activeCompany() {
          $comp_stat = $this->company()->first(['status'])->toArray();
    
          return ($comp_stat >= 1) ? true : false;
       }
    
    然后,我用以下内容修改了
    app\Http\Middleware\Authenticate.php
    中的handle方法:

       public function handle($request, Closure $next, $guard = null) {
          if (Auth::guard($guard)->guest()) {
             if ($request->ajax() || $request->wantsJson()) {
                return response('Unauthorized.', 401);
             } else {
                return redirect()->guest('login');
             }
          }
    
          /* begin modified section */
    
          if (Auth::check()) {
             # logout if company is inactive
             if (!auth()->user()->activeCompany()) {
                Auth::logout();
                return redirect()->guest('login')->with('comp-status-error', true);
             }
    
             # logout if user is inactive
             if (auth()->user()->status != 1) {
                Auth::logout();
                return redirect()->guest('login')->with('user-status-error', true);
             }
          }
    
          /* end modified section */
    
          return $next($request);
       }
    
    因此,从技术上讲,用户在公司和用户状态检查之前已经获得了身份验证,这就是为什么您必须手动调用
    Auth::logout()
    。这也是为什么我觉得它有点“脏”的原因,但再一次,我想不出任何其他的方法,所以我不得不做一些有效的事情!我鼓励任何人发表评论,如果他们看到一个更好的方法来实现这一点