Laravel 5 Как работать с аутентификацией в двух разных формах входа с разными таблицами

Я создал две разные формы регистрации с двумя разными регистрационными формами и двумя разными таблицами, на данный момент я могу сделать следующее

Login into table A(users) Register into table A(users) Register into table B(students) 

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

Вот моя функция кода для входа в систему

  public function postLoginl(Request $request) { $this->validate($request, [ 'learnerCell'=> 'required', 'password' => 'required', ]); $credentials = $this->getCredentialsl($request); if (Auth::attempt($credentials, $request->has('remember'))) { return redirect()->intended($this->redirectPath()); } return redirect($this->loginPath()) ->withInput($request->only('learnerCell', 'remember')) ->withErrors([ 'learnerCell' => $this->getFailedLoginMessage(), ]); } 

Когда я проверяю config / auth.php, есть скрипт

  <?php return [ 'driver' => 'eloquent', 'model' => App\User::class, 'table' => 'users', 'password' => [ 'email' => 'emails.password', 'table' => 'password_resets', 'expire' => 60, ], ]; 

из которых я думаю, где проблема, потому что у нее нет модели для управления логином, она ссылается только на одну модель (Пользователь), и у меня есть еще одна (Learner).

Я предполагаю, что вы используете Laravel 5.1 – сообщите мне, если это неправда, и я постараюсь вам помочь и с другой версией.

Самый простой способ сделать это – хранить пользователей в одной таблице с дополнительным флагом типа . Я понимаю, что вы хотите иметь 2 разных процесса входа и разные учетные данные, которые будут использоваться для входа. Когда у вас есть пользователи в той же таблице, способ сделать это:

 class UserController { use AuthenticatesUsers; //use email for authentication public $username = 'email'; protected function getCredentials(Request $request) { //allow only users with type=user return array_merge($request->only('email', 'password'), ['type' => 'user']); } } class LearnerController { use AuthenticatesUsers; //use phone for authentication public $username = 'phone'; protected function getCredentials(Request $request) { //allow only users with type=learner return array_merge($request->only('phone', 'password'), ['type' => 'learner']); } } 

Это можно сделать, как показано ниже,

В app\Http\Controllers\Student создайте AuthCotroller как AuthCotroller ниже. Этот контроллер будет обрабатывать аутентификацию учащихся.

 <?php namespace App\Http\Controllers\Student; use App\Http\Requests; use App\Http\Controllers\Auth\AuthController as MainAuthController; use Illuminate\Http\Request; class AuthController extends MainAuthController { public $loginPath = '/student/login'; public $redirectPath = '/student/dashboard'; public $redirectAfterLogout = '/student/login'; /** * Show the application login form. * * @return \Illuminate\Http\Response */ public function getLogin() { return view('student.login'); } /** * Log the user out of the application. * * @return \Illuminate\Http\Response */ public function getLogout() { $this->auth->logout(); return redirect(property_exists($this, 'redirectAfterLogout') ? $this->redirectAfterLogout : '/'); } /** This method overrides Trait method. So, We can redirect Different Users to different destinations * Get the post register / login redirect path. * * @return string */ public function redirectPath() { if (property_exists($this, 'redirectPath')) { return $this->redirectPath; } return property_exists($this, 'redirectTo') ? $this->redirectTo : '/student/dashboard'; } } из <?php namespace App\Http\Controllers\Student; use App\Http\Requests; use App\Http\Controllers\Auth\AuthController as MainAuthController; use Illuminate\Http\Request; class AuthController extends MainAuthController { public $loginPath = '/student/login'; public $redirectPath = '/student/dashboard'; public $redirectAfterLogout = '/student/login'; /** * Show the application login form. * * @return \Illuminate\Http\Response */ public function getLogin() { return view('student.login'); } /** * Log the user out of the application. * * @return \Illuminate\Http\Response */ public function getLogout() { $this->auth->logout(); return redirect(property_exists($this, 'redirectAfterLogout') ? $this->redirectAfterLogout : '/'); } /** This method overrides Trait method. So, We can redirect Different Users to different destinations * Get the post register / login redirect path. * * @return string */ public function redirectPath() { if (property_exists($this, 'redirectPath')) { return $this->redirectPath; } return property_exists($this, 'redirectTo') ? $this->redirectTo : '/student/dashboard'; } } 

Теперь создайте следующее промежуточное ПО,

 <?php namespace App\Http\Middleware; use Closure; class ChangeUserToStudent { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { \Config::set('auth.table', 'students'); \Config::set('auth.model', 'App\DB\Student'); \Config::set('session.cookie', 'student_session'); \Config::set('session.path', '/student/'); return $next($request); } } 

Теперь в app/Http/kernel.php зарегистрируйтесь выше промежуточного программного обеспечения с другим промежуточным программным обеспечением, как показано ниже,

 /** * The application's route middleware. * * @var array */ protected $routeMiddleware = [ ..... 'user.student' => 'App\Http\Middleware\ChangeUserToStudent', ..... ]; 

теперь в routes.php создайте следующую группу маршрутов со user.student программным обеспечением user.student ,

 <?php // Protected Routes by auth and acl middleware Route::group(['prefix' => 'student', 'namespace' => 'Student', 'middleware' => ['user.student']], function () { Route::get('login', [ 'as' => 'student.login', 'uses' => 'AuthController@getLogin' ]); Route::get('logout', [ 'as' => 'student.logout', 'uses' => 'AuthController@getLogout' ]); Route::post('login', 'AuthController@postLogin'); }); //Other student routes accessed only after login Route::group(['prefix' => 'student', 'namespace' => 'Student', 'middleware' => ['user.student','auth']], function () { Route::get('dashboard', [ 'as' => 'student.dashboard', 'uses' => 'DashboardController@index' ]); ]); 

Я надеюсь, что вы уже создали таблицу Student model and students которая должна быть по крайней мере такой же, как таблица users . Теперь, при доступе к маршруту с префиксом student , промежуточное программное обеспечение user.student перескакивает и изменяет таблицу проверки подлинности students и моделирует Student на лету. У вас может быть даже сеанс для student как я уже показал.

В каталоге представлений вы можете поместить все связанные со студентом представления в каталог student . Я предполагаю, что у вас есть отдельная форма входа для ученика, которую вы должны создать в каталоге view\student .

Таким образом, вы можете полностью отделить секцию student от раздела users . Я надеюсь, что это помогает.