Laravel 7 мульти-аутентификации с 3 разными таблицами - PullRequest
2 голосов
/ 09 мая 2020

Я новичок в Laravel 7, и я создаю приложение, которое требует 3 разных пользовательских таблиц (администратор, продавец, менеджер склада). Каждый пользователь может войти в систему из отдельной формы входа и имеет другую панель управления. Я хочу реализовать аутентификацию для каждого пользователя, чтобы войти в свою указанную панель управления, у пользователей есть разные столбцы, поэтому я хочу sh хранить их в отдельных таблицах вместо одной таблицы со столбцом ролей.

1 Ответ

1 голос
/ 16 июня 2020

вы должны добавить три таблицы в config / auth. php в охранниках и провайдерах, чтобы функция auth () распознала каждую таблицу: примечание, чтобы заменить его вашими моделями name

    '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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...