usuarios usuario tabla permisos está esta diferente control con campos autorizada auth autenticación autenticacion administrador acción php laravel laravel-5

php - usuario - Laravel 5 Cómo trabajar con autenticación en dos formularios de inicio de sesión diferentes con tablas diferentes



laravel roles y permisos (2)

Se puede hacer de la siguiente manera

En la app/Http/Controllers/Student crea AuthCotroller como a continuación. Este controlador manejará la autenticación del estudiante.

<?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''; } }

Ahora crea el siguiente middleware,

<?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); } }

Ahora en la app/Http/kernel.php registre el middleware anterior con otro middleware como se muestra a continuación,

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

ahora en routes.php crea el siguiente grupo de rutas con el middleware 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'' ]); ]);

Espero que ya haya creado una tabla de students y modelos de students que, en esencia, debería ser al menos igual que una tabla de users . Ahora, mientras accede a la ruta con student prefijo del student , el middleware del student user.student y cambiará la tabla de autenticación a los students y user.student al Student sobre la marcha. Incluso puede tener una sesión diferente para el student como ya he mostrado.

En el directorio de view puede colocar todas las vistas relacionadas con los student directorio de student . Supongo que tiene un formulario de inicio de sesión separado para el alumno que debe crear en view/student directorio view/student .

De esta manera, puede separar completamente student sección de student sección de users . Espero que ayude.

Creé dos formularios de inicio de sesión diferentes con dos formularios de registro diferentes y dos tablas diferentes, en este momento puedo hacer lo siguiente

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

Pero no puedo iniciar sesión en la tabla B, es como que se confunde en qué tabla iniciar sesión. Acabo de modificar la funcionalidad incorporada de autenticación.

Aquí está mi función de código para iniciar sesión en

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(), ]); }

Cuando reviso config / auth.php hay un script

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

de lo que creo que es donde radica el problema, porque no tiene modelo para controlar el inicio de sesión, solo hace referencia a un modelo (Usuario) y tengo otro llamado (Estudiante).


Supongo que estás usando Laravel 5.1 . Avísame si no es cierto e intentaré ayudarte con otra versión también.

La forma más sencilla de hacerlo es almacenar usuarios en una sola tabla con un indicador de tipo adicional. Entiendo que desea tener 2 procesos de inicio de sesión diferentes y diferentes credenciales para ser utilizado para iniciar sesión. Una vez que tienes usuarios en la misma mesa, la forma de hacerlo es:

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'']); } }