Как создать мульти аутентификацию в laravel 7? - PullRequest
1 голос
/ 19 марта 2020

Раньше я был для laravel 5.5 и ранее, чем https://github.com/Hesto/multi-auth.

Но этот репозиторий не обновляется для laravel 7.0

Как создать мульти аутентификацию в Laravel 7.0?

1 Ответ

2 голосов
/ 24 марта 2020

Если вы хотите использовать пакет, вы можете использовать этот пакет laravel -multiauth

ИЛИ

, если вы хотите создайте пользовательский multi-auth на основе поля в пользовательской таблице for.eg is_admin, затем выполните следующие шаги:

Предполагая, что вы установили Laravel и установили соединение с базой данных

Step1: Добавить новую строку is_admin в таблицу пользователей и модель. затем запустите миграцию.

 public function up()
        {
            Schema::create('users', function (Blueprint $table) {
                $table->bigIncrements('id');
                $table->string('name');
                $table->string('email');
                $table->timestamp('email_verified_at')->nullable();
                $table->boolean('is_admin')->nullable(); // add this
                $table->string('password');
                $table->rememberToken();
                $table->timestamps();

        });

}

приложение / пользователь. php

protected $fillable = [
    'name', 'email', 'password', 'is_admin' //add here
];

Затем запустите миграцию

   php artisan migrate

Шаг 2: Создать Auth с помощью скаффолда

Установить пакет laravel/ui с помощью следующей команды

composer require laravel/ui 

Создать аутентификацию

php artisan ui bootstrap --auth 

npm install

npm run dev

Шаг 3: Создать IsAdmin Промежуточное программное обеспечение разрешит только admin доступ пользователям к этим маршрутам

php artisan make:middleware IsAdmin

app / http / middleware / IsAdmin. php

Добавьте это в IsAdmin промежуточное ПО

public function handle($request, Closure $next)
{
    if(auth()->user()->is_admin == 1){
       return $next($request);
    }
    return redirect(‘home’)->with(‘error’,"You don't have admin access.");
}

Зарегистрируйте IsAdmin промежуточное ПО в app/Http/Kernel.php

protected $routeMiddleware = [
       'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
       'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
       'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
   'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    'is_admin' => \App\Http\Middleware\IsAdmin::class, // add this

];

Шаг 4: Создайте свой маршрут для администратора в routes/web.php

Route::get('admin/home', 'HomeController@adminHome')->name('admin.home')->middleware('is_admin');

Шаг 5: Добавить adminHome() метод для маршрута администратора в app/Http/Controllers/HomeController.php

public function adminHome()
 {
      return view('adminHome');
 }

Шаг 6: Изменить LoginController, когда пользователь войдет в систему, чем мы перенаправим в соответствии с доступом пользователя. если обычный пользователь, то мы будем перенаправлять на домашний маршрут, а если пользователь с правами администратора, то мы перенаправляем на административный маршрут в app/Http/Controllers/Auth/LoginController.php

public function login(Request $request)
{   
    $input = $request->all();
    $this->validate($request, [
        'email' => 'required|email',
        'password' => 'required',
    ]);

    if(auth()->attempt(array('email' => $input['email'], 'password' => $input['password'])))
    {
        if (auth()->user()->is_admin == 1) {
            return redirect()->route('admin.home');
        }else{
            return redirect()->route('home');
        }
    }else{
        return redirect()->route('login')
            ->with('error','Email-Address And Password Are Wrong.');
    }

}
...