различные маршруты входа в систему и виды входа в систему для студента и администратора - PullRequest
1 голос
/ 18 мая 2019

Каждый новичок Laravel борется с множественной аутентификацией, я не исключение

Я пытаюсь создать систему управления студентами.Будет два разных маршрута для администратора admin/login и для студента student/login.

Студент не может зарегистрироваться, но он будет зарегистрирован администратором.

Таким образом, у студента есть толькодоступ к student/dashboard, регистрация студентов будет осуществляться администратором по admin/dashboard.

Ниже подробно описано, что я уже сделал:

  1. созданная миграциякак для администратора, так и для студента.

  2. создан сторож для администратора и студента.

  3. изменен контроллер входа в систему и добавлены методы adminLogin и studentLogin.

  4. изменено RedirectIfAuthenticated промежуточное ПО

Config / auth.php

'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'students' => [
            'driver' => 'session',
            'provider' => 'students',
        ],
        'web-admin'=>[
            'driver'=>'session',
            'provider'=>'admin',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'students',
            'hash' => false,
        ],
    ],
'providers' => [
        'students' => [
            'driver' => 'eloquent',
            'model' => App\Student::class,
        ],
        'admin' => [
            'driver' => 'eloquent',
            'model' => App\Admin::class,
        ],

'passwords' => [
        'students' => [
            'provider' => 'students',
            'table' => 'password_resets',
            'expire' => 60,
        ],
        'admin' => [
            'provider' => 'admin',
            'table' => 'password_resets',
            'expire' => 60,
        ],
    ],

LoginController.php

lass LoginController extends Controller
{

    use AuthenticatesUsers;

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

        $this->middleware('guest:web-admin')->except('logout');
        $this->middleware('guest:students')->except('logout');
    }

    public function showAdminLoginForm()
    {
        return view('admin.login', ['url' => 'admin']);
    }

    public function adminLogin(Request $request)
    {
        $this->validate($request, [
            'admin_id'   => 'required',
            'password' => 'required|min:8'
        ]);

        if (Auth::guard('admin')->attempt(['admin_id' => $request->adminid, 'password' => $request->password], $request->get('remember'))) {

            return redirect()->intended('/admin/dashboard');
        }
        return back()->withInput($request->only('admin_id', 'remember'));
    }

    public function showStudentLoginForm()
    {
        return view('student.login', ['url' => 'student']);
    }

    public function studentLogin(Request $request)
    {
        $this->validate($request, [
            'roll_no'   => 'required',
            'password' => 'required|min:8'
        ]);

        if (Auth::guard('writer')->attempt(['roll_no' => $request->roll_no, 'password' => $request->password], $request->get('remember'))) {

            return redirect()->intended('/student/dashboard');
        }
        return back()->withInput($request->only('roll_no', 'remember'));
    }

}

RedirectAuthenticated.php

class RedirectIfAuthenticated
{
    public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
           if('web_admin'==='$guard'){
               return redirect('/admin/dashboard');
           }
           return redirect('/admin/login');
        }
        if (Auth::guard($guard)->check()) {
            if('students'==='$guard'){
                return redirect('/student/dashboard');
            }
            return redirect('/student/login');
         }
        return $next($request);
    }
}

Я создал две папки в представлении: ученик иадмин.У них обоих есть два файла.login.blade.php и dashboard.blade.php

Что делает Laravel, он показывает логин и регистрируется в папке auth.

Я хочу дать два маршрута один для /admin/login, которые возвращаютсяadmin.login view.

То же самое для студента /student/login, который возвращает student.login view.

Я хочу удалить /register route и сделать ссылку доступной на admin dashboard, тамне будет ссылки для регистрации администратора.

Также ограничьте доступ пользователя к административной области.

** Мне не нужен весь код, просто помогите мне сделать шаги и узнать, как мне следует следовать илиизменения, которые я должен сделать **

1 Ответ

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

Наконец я решил это.Я не использовал php artisan make:auth, вместо этого я делал это с нуля.
Создал свежий проект, удалил User.php и миграцию.
Создали модели Student.php и Admin.php вместе с миграциями и контроллерами.
php artisan make:model Student -mc
php artisan make:model Admin -mc

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

'guards' => [
        'student'=>[
            'driver'=>'session',
            'provider'=>'students'
        ],
        'admin'=>[
            'driver'=>'session',
            'provider'=>'admins'     
        ],
    ],
'providers' => [
        'students'=>[
            'driver'=>'eloquent',
            'model'=>App\Student::class,
        ],
        'admins'=>[
            'driver'=>'eloquent',
            'model'=>App\Admin::class,
        ] 

Итак, у меня есть два охранника ученик и admin .Вот модель администратора Admin.php

class Admin extends Authenticatable
{
    use Notifiable;
    protected $fillable = [
        'firstname', 'lastname','admin_id', 'password',
    ];
    protected $hidden = [
        'password', 'remember_token',
    ];
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

и модель Student Student.php

class Student extends Authenticatable
{
    use Notifiable;

    protected $fillable = [
        'firstname', 'lastname','admin_id', 'password',
    ];

    protected $hidden = [
        'password', 'remember_token',
    ];


    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}

После этого я изменил AdminController.php

class AdminsController extends Controller
{
    use AuthenticatesUsers;
    protected $guard = 'admin';

    public function showLogin(){
        return view('admin.login');
    }
    public function dashboard(){
        return view('admin.dashboard');
    }
    public function login(Request $request){
        $this->validate($request,[
            'admin_id' => 'required',
            'password'=>'required|min:8', 
        ]);

        if(Auth::guard('admin')->attempt(['admin_id'=>$request['admin_id'], 'password'=>$request['password']])){
            return redirect('admin/dashboard');
        }
        return redirect('/admin');
    }
}

Затем я создал маршруты Web.php

Route::get('/', function () {
    return view('welcome');
});

Route::get('/admin','AdminsController@showLogin');
Route::get('/student','StudentsController@showLogin');
Route::get('/admin/dashboard','AdminsController@dashboard');
Route::get('/student','StudentsController@showLogin');
Route::post('/admin/login','AdminsController@login');
Route::post('/student/login','StudentsController@login');

Теперь, в это время вход в систему работает.Мне все еще нужно многое сделать.Если есть предложения, я приветствую это, пожалуйста, прокомментируйте ниже.

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