plantillas - ¿Alguien puede explicar Laravel 5.2 Multi Auth con un ejemplo?
laravel foreach index (3)
Después de muchas excavaciones y muchas preguntas y respuestas, finalmente logré trabajar con Laravel 5.2 Multi Auth con dos tablas, por lo que estoy escribiendo Respuesta de mi propia pregunta.
Cómo implementar Multi Auth en Larvel 5.2
Como se ha mencionado más arriba.
Dos tablas de
admin
y
users
Laravel 5.2 tiene un nuevo comando
artisan
.
php artisan make:auth
generará una
route
básica de inicio de sesión / registro,
view
y
controller
para
user
tabla de
user
.
Haga una tabla de
admin
como tabla de
users
para simplificar.
Controlador para 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 administrador
crear un middleware para
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,
];
use 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'');
}
}
Todo eso es necesario para que funcione 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, debe usar
Auth::guard(''guard_name'')->user()
para cerrar sesión
Auth::guard(''guard_name'')->user()->logout()
para el usuario autenticado json
Auth::guard(''guard_name'')->user()
Editar 2
Ahora puede descargar el proyecto implementado Laravel 5.2 Multiauth http://imrealashu.in/code/laravel/multi-auth-with-laravel-5-2-2/
Estoy tratando de autenticar a los
usuarios
y al
administrador de
user
tabla de
user
y la tabla de
admin
respectivamente.
Estoy usando el modelo de
User
según lo provisto por laravel fuera de la caja y lo creé para
Admin.
He agregado una clave de protección 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'');
});
He creado un directorio llamado
AuthAdmin
donde están presentes los archivos
AuthController.php
y
PasswordController.php
predeterminados de Laravel.
(Espacio de nombres modificado en consecuencia)
En primer lugar, en los documentos de Laravel se menciona cómo especificar la protección personalizada mientras se autentica de esta manera, lo que no funciona.
Hay otro método mencionado en los documentos de Laravel para usar un guardia que tampoco funciona.
Sería beneficioso si alguien pudiera resolver los problemas y corregirme si me equivoco.
En caso de que esto ayude a alguien, y esto puede deberse a mi falta de comprensión del middleware, esto es lo que tuve que hacer para que esto funcionara (además de los pasos tomados 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 de middleware de
admin
separado e incluso en un grupo de
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é esto es así, pero espero que salve a otros de arrancarse el pelo como lo hice yo.
Es muy fácil en laravel 5.6.
Simplemente vaya a
config/auth.php
y agregue esta línea en la matriz de
providers
:
''admins'' => [
''driver'' => ''database'',
''table'' => ''admin_table''
]
Tenga en cuenta que utilizamos la
database
de
database
para el controlador no
eloquent
.
Ahora agregue esto a la matriz de
guards
:
''admin_guard'' => [
''driver'' => ''session'',
''provider'' => ''admins''
]
Ahora hemos terminado! Use esto cuando trabaje con la tabla de administradores:
Auth::guard(''admin_guard'')->User();
Aclamaciones.