Я создал две разные формы регистрации с двумя разными регистрационными формами и двумя разными таблицами, на данный момент я могу сделать следующее
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
. Я надеюсь, что это помогает.