Laravel 7 多重身份验证与 3 个不同的表 [关闭]

Posted

技术标签:

【中文标题】Laravel 7 多重身份验证与 3 个不同的表 [关闭]【英文标题】:Laravel 7 multi auth with 3 different tables [closed] 【发布时间】:2020-08-25 07:14:21 【问题描述】:

我是 Laravel 7 的新手,我正在创建一个需要 3 个不同用户表(管理员、销售员、仓库经理)的应用程序 每个用户都可以从单独的登录表单登录,并拥有不同的仪表板。 我想为每个用户实现身份验证,登录到他们指定的仪表板,用户有不同的列,这就是为什么我希望将它们保存在单独的表中而不是一个具有角色列的表中。

【问题讨论】:

【参考方案1】:

您应该在警卫和提供程序的 config/auth.php 中添加三个表,以使 auth() 函数识别每个表:注意将其替换为您的模型名称

    'guards' => [
       'admin' => [
          'driver'     => 'session',
          'provider'   => 'admin',
        ],
   'salesperson' => [
          'driver'     => 'session',
          'provider'   => 'salesperson',
        ],
   'manager' => [
          'driver'     => 'session',
          'provider'   => 'manager',
        ],
    ],

'providers' => [
        'admin' => [
            'driver' => 'eloquent',
            'model' => App\Admin::class,
        ],
        'salesperson' => [
            'driver' => 'eloquent',
            'model' => App\Salesperson::class,
        ],

        'manager' => [
            'driver' => 'eloquent',
            'model' => App\Manager::class,
        ],
    ],

之后你应该为每个人创建一个中间件来控制登录,所以你应该在中间件$routemiddleware函数中添加它,在kernel.php中:

'admin' => \App\Http\Middleware\AuthenticateAdmin::class,
'salesperson' => \App\Http\Middleware\AuthenticateSalesperson::class,
'manager' => \App\Http\Middleware\AuthenticateManager::class,

为每个控制器创建一个:

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Hash;
use App\Admin;


class LoginController extends Controller

      use AuthenticatesUsers;

      public function __construct()
      
          $this->middleware('guest');
      

      public function login(Request $request)
    
              $this->validate($request, [
                  'email' => 'required|email',
                  'password' => 'required',
              ]);
              if (auth()->guard('admin')->attempt(['email' => $request->input('email'), 'password' => $request->input('password')])) 
                  return redirect('*your route*');
               else 
                  dd('your username and password are wrong.');
              
    

      public function getLogin()
      
          return view('*the login form*');
      

在你的 Admin.php

use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class Relative extends Authenticatable

  use Notifiable;

    protected $guarded = [];

    protected $hidden = [
      'password'
    ];

    public function getAuthPassword()
    
      return $this->password;
    


对每个步骤重复最后两个步骤。如果您需要更多信息:https://laracasts.com/discuss/channels/laravel/multi-auth-login-with-single-table-user-using-middleware-in-laravel

【讨论】:

以上是关于Laravel 7 多重身份验证与 3 个不同的表 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.4:在两个表上具有多重身份验证的 JWT API 一个有效,另一个无效

使用一张表 Laravel 5.4 进行多重身份验证

Laravel - 具有多重身份验证的未经身份验证的重定向问题

Laravel 自定义多重身份验证

如何在 laravel 5.2 中使用多重身份验证 [关闭]

laravel 5.4 中两种不同的身份验证模型