Войти с одним параметром - PullRequest
0 голосов
/ 04 мая 2019

Я хочу сделать вход в Laravel, который получает только один параметр, т. Е. Имеет простую форму, которая получает один вход, и на основе этого входа пользователь проходит аутентификацию. Если пользователь является администратором, он будет перенаправлен на /adminpage, в противном случае, если пользователь является обычным пользователем, он перенаправит на /homepage.

Я хочу использовать пользовательскую таблицу, модель и контроллер. Я искал в интернете, но не смог найти решение.

EDIT У меня есть такая форма:

<form action="someroute" method="POST">
<input type="text" name="rf_id">
<input type="submit" value="login">
</form>

Моя миграция:

Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('lastname');
            $table->string('workid');
            $table->boolean('isAdmin')->default(False);
            $table->string('rf_id');//
            $table->timestamps();
        });

Теперь мне нужен контроллер, который справится с этим. Итак, основываясь на rf_id, контроллер должен найти пользователя и проверить его роль. Я пытаюсь это, но не работает:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class TestController extends Controller
{


    public function index(){
        return view('singin');
    }

    public function login(Request $request){

        $credentials = $request->only('rf_id');

        if(Auth::attempt($credentials)){
             //we need to know who is logging in
             return $this->filterAndRedirect(Auth::user());
         }
         return "there is no user with that rfid";
     }

     private function filterAndRedirect(User $user){
       //the function to take care of the routing
       if($user->isAdmin){
          # return redirect('/homepage');
          return "This is admin";

       }
       else{
          # return redirect('/adminpage');
          return "This is worker";

     }

}
}

1 Ответ

0 голосов
/ 04 мая 2019

Вот как бы я это сделал;

  • Прежде всего, вам необходимо добавить столбец таблицы в файле миграции для типа пользователя и параметра входа в систему. Проверьте документацию по миграции ниже

  • Далее идет страница, где у вас есть форма, я не знаю, каков ваш параметр, поэтому я просто назову его «param». Я предполагаю, что вы знаете, как создавать и отправлять формы с помощью laravel, поэтому я не буду размещать здесь код.

  • Теперь интересная часть, контроллеры:

Так будет выглядеть мое создание пользователя в RegisterController;

Обратите внимание, что я использую стандартные контроллеры аутентификации laravel

public function createStandardUser(Request $request){
    //function to add the Standard user
    $user = User::create([
    'name' => $request['name'],
    'email' => $request['email'],
    'param' => $request['login-param'],
    'user-type' => 'standard'//the user type
    ]);

    Auth::login($user);//Explicitly starts a new session for the user 
    return redirect('/homepage');
}

Если у вас будет другая форма для регистрации администратора, функция добавления пользователя-администратора будет примерно такой же;

public function createAdminUser(Request $request){
     //function to add the Admin user
     $user = User::create([
     'name' => $request['name'],
     'email' => $request['email'],
     'param' => $request['login-param'],
     'user-type' => 'admin'//the user type
    ]);

    Auth::login($user);//Explicitly starts a new session for the user
    return redirect('/adminpage');
}
  • Последней частью будет LoginController, где вы можете использовать функцию attempt(), чтобы аутентифицировать пользователя и начать новый сеанс для него, используя ваш единственный параметр.

У вас будут эти функции

public function login(Request $request){

   if(Auth::attempt(['login-param' => $request->get('login-param'])){
        //we need to know who is logging in
        return $this->filterAndRedirect(Auth::user());
    }
}

private function filterAndRedirect(User $user){
  //the function to take care of the routing
  if($user->user-type == 'standard'){
      return redirect('/homepage');

  }else if($user->user-type == 'admin'){
      return redirect('/adminpage');
  } 
}

Соответствующая документация: Документы по миграции баз данных , Документы по аутентификации Laravel

Предложение: на вашем месте я бы использовал роли / разрешения, а не строку таблицы в вашей БД, я думаю, что она более надежна. Проверьте эту библиотеку, она хорошо документирована и обновляется -> Laravel Permission By Spatie

РЕДАКТИРОВАТЬ: В этом ответе предполагается, что вы используете стандартную модель пользователя и контроллеры аутентификации, потому что в этом весь смысл использования инфраструктуры, не так ли?

...