Lo que he hecho hasta ahora.
Estoy tratando de autenticar a los usuarios y a user
mesa de admin
user
y la tabla de admin
, respectivamente.
Estoy usando el modelo de User
proporcionado por laravel y creé exactamente lo mismo para Admin
.
He agregado una clave de guardia y una clave de proveedor en auth.php
Guardias
'guards' => [ 'user' =>[ 'driver' => 'session', 'provider' => 'user', ], 'admin' => [ 'driver' => 'session', 'provider' => 'admin', ], ],
Proveedores
'providers' => [ 'user' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], 'admin' => [ 'driver' => 'eloquent', 'model' => App\Admin::class, ] ],
Rutas
Route::group(['middleware' => ['web']], function () { //Login Routes... Route::get('/admin/login','AdminAuth\AuthController@showLoginForm'); Route::post('/admin/login','AdminAuth\AuthController@login'); Route::get('/admin/logout','AdminAuth\AuthController@logout'); // Registration Routes... Route::get('admin/register', 'AdminAuth\AuthController@showRegistrationForm'); Route::post('admin/register', 'AdminAuth\AuthController@register'); Route::get('/admin', 'AdminController@index'); });
AuthAdmin
un directorio llamado AuthAdmin
donde están presentes los archivos predeterminados AuthController.php
y PasswordController.php
Laravel. (Espacio de nombres modificado en consecuencia)
En primer lugar, en los documentos de Laravel se mencionó cómo especificar guardia personalizada mientras se autentica de esta manera, lo que no funciona.
Hay otro método mencionado en los documentos de Laravel para usar un protector que tampoco funciona.
Sería muy útil si alguien pudiera resolver los problemas y corregirme si me equivoco.
Después de muchas excavaciones y muchas preguntas y respuestas, finalmente me las arreglé para trabajar en Laravel 5.2 Multi Auth con dos tablas, así que estoy escribiendo la respuesta a mi propia pregunta.
Cómo implementar Multi Auth en Larvel 5.2
Como se ha mencionado más arriba. admin
y users
dos tablas
Laravel 5.2 tiene un nuevo comando de artisan
.
php artisan make:auth
generará una route
básica de inicio / registro, view
y controller
para user
tabla de user
.
Cree una tabla admin
como tabla de users
para simplificar.
Controlador para el administrador
app/Http/Controllers/AdminAuth/AuthController
app/Http/Controllers/AdminAuth/PasswordController
(nota: acabo de copiar estos archivos de la app/Http/Controllers/Auth/AuthController
aquí)
config/auth.php
//Authenticating guards 'guards' => [ 'user' =>[ 'driver' => 'session', 'provider' => 'user', ], 'admin' => [ 'driver' => 'session', 'provider' => 'admin', ], ], //User Providers 'providers' => [ 'user' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], 'admin' => [ 'driver' => 'eloquent', 'model' => App\Admin::class, ] ], //Resetting Password 'passwords' => [ 'clients' => [ 'provider' => 'client', 'email' => 'auth.emails.password', 'table' => 'password_resets', 'expire' => 60, ], 'admins' => [ 'provider' => 'admin', 'email' => 'auth.emails.password', 'table' => 'password_resets', 'expire' => 60, ], ],
route.php
Route::group(['middleware' => ['web']], function () { //Login Routes... Route::get('/admin/login','AdminAuth\AuthController@showLoginForm'); Route::post('/admin/login','AdminAuth\AuthController@login'); Route::get('/admin/logout','AdminAuth\AuthController@logout'); // Registration Routes... Route::get('admin/register', 'AdminAuth\AuthController@showRegistrationForm'); Route::post('admin/register', 'AdminAuth\AuthController@register'); Route::get('/admin', 'AdminController@index'); });
AdminAuth/AuthController.php
Agregue dos métodos y especifique $redirectTo
y $guard
protected $redirectTo = '/admin'; protected $guard = 'admin'; public function showLoginForm() { if (view()->exists('auth.authenticate')) { return view('auth.authenticate'); } return view('admin.auth.login'); } public function showRegistrationForm() { return view('admin.auth.register'); }
te ayudará a abrir otro formulario de inicio de sesión para el administrador
creando un middleware para el admin
class RedirectIfNotAdmin { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @param string|null $guard * @return mixed */ public function handle($request, Closure $next, $guard = 'admin') { if (!Auth::guard($guard)->check()) { return redirect('/'); } return $next($request); }
}
registrar middleware en kernel.php
protected $routeMiddleware = [ 'admin' => \App\Http\Middleware\RedirectIfNotAdmin::class, ];
utilice este middleware en AdminController
, por ejemplo,
namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Auth; class AdminController extends Controller { public function __construct(){ $this->middleware('admin'); } public function index(){ return view('admin.dashboard'); } }
Eso es todo lo que se necesita para hacerlo funcionar y también para obtener json de uso de administrador autenticado
Auth::guard('admin')->user()
Editar – 1
Podemos acceder al usuario autenticado directamente usando
Auth::user()
pero si tiene dos tablas de autenticación, entonces tiene que usar
Auth::guard('guard_name')->user()
para desconectarse
Auth::guard('guard_name')->user()->logout()
para el usuario autenticado json
Auth::guard('guard_name')->user()
Ahora puede descargar Laravel 5.2 Multiauth implementado Proyecto http://imrealashu.in/code/laravel/multi-auth-with-laravel-5-2-2/
En caso de que esto ayude a alguien, y esto puede deberse a mi falta de comprensión del middleware, esto es lo que tengo que hacer para que esto funcione (además de los pasos dados por @imrealashu) …
En route.php
:
Route::get('/admin', [ 'middleware' => 'admin', 'uses' => 'AdminController@index' ]);
Esto está en el grupo de middleware web
. Antes de esto intenté ponerlo en un grupo separado de middleware de admin
e incluso en un grupo auth:admin
pero esto no funcionó, solo funcionó para mí cuando especifiqué el middleware como administrador en la ruta misma. No tengo idea de por qué es esto, pero espero que evite que otros se tomen el pelo como yo.
En Laravel hay muchos paquetes de generador de panel de administración disponibles. Prefiero Voyager Admin. Instalarlos fácil y brisa. Puede ahorrarle toneladas de código. Solo necesitas entender cómo funciona. No reinventar la rueda.
Voyager – The Missing Laravel Admin
Una aplicación de Laravel con Gentelella bootstrap admin tempalte.