Quelqu'un peut il expliquer Laravel 5.2 Multi Auth avec exemple
Ce que j'ai fait jusqu'à présent.
Je suis en train d'authentifier utilisateurs et admin forme user
table et admin
table, respectivement.
J'utilise le modèle User
fourni par laravel et créé exactement de la même manière pour Admin
.
J'ai ajouté une clé de garde et une clé de fournisseur dans auth.php
Gardes
'guards' => [
'user' =>[
'driver' => 'session',
'provider' => 'user',
],
'admin' => [
'driver' => 'session',
'provider' => 'admin',
],
],
Les Fournisseurs de
'providers' => [
'user' => [
'driver' => 'eloquent',
'model' => AppUser::class,
],
'admin' => [
'driver' => 'eloquent',
'model' => AppAdmin::class,
]
],
Itinéraires
Route::group(['middleware' => ['web']], function () {
//Login Routes...
Route::get('/admin/login','AdminAuthAuthController@showLoginForm');
Route::post('/admin/login','AdminAuthAuthController@login');
Route::get('/admin/logout','AdminAuthAuthController@logout');
// Registration Routes...
Route::get('admin/register', 'AdminAuthAuthController@showRegistrationForm');
Route::post('admin/register', 'AdminAuthAuthController@register');
Route::get('/admin', 'AdminController@index');
});
, j'ai créé un répertoire appelé AuthAdmin
où les fichiers AuthController.php
et PasswordController.php
par défaut de Laravel sont présents. (Espace de noms modifié en conséquence)
Tout d'abord dans les documents de Laravel mentionné que comment spécifier custom guard tout en s'authentifiant comme ceci qui ne fonctionne pas.
Il y a une autre méthode mentionnée dans les documents de laravel pour utiliser un garde qui ne fonctionne pas aussi.
Il serait très utile que quelqu'un puisse résoudre les problèmes et me corriger si je me trompe.
3 réponses
Après beaucoup de creuser et beaucoup de questions et réponses, j'ai finalement réussi à travailler Laravel 5.2 Multi Auth avec deux tables, donc j'écris la réponse de ma propre Question.
Comment implémenter Multi Auth dans Larvel 5.2
Comme mentionné ci-dessus.
Deux tables admin
et users
Laravel 5.2 a une nouvelle commande artisan
.
php artisan make:auth
Il va générer une connexion/registre de base route
, view
et controller
pour user
table.
Faire un admin
table comme users
table pour plus de simplicité.
Contrôleur Pour Adminapp/Http/Controllers/AdminAuth/AuthController
app/Http/Controllers/AdminAuth/PasswordController
(note: je viens de copier ces fichiers de app/Http/Controllers/Auth/AuthController
ici)
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
Ajouter deux méthodes et spécifier $redirectTo
et $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');
}
Il vous aidera à ouvrir un autre formulaire de connexion pour admin
La Création d'un middleware pour 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);
}
}
Enregistrez le middleware dans kernel.php
protected $routeMiddleware = [
'admin' => \App\Http\Middleware\RedirectIfNotAdmin::class,
];
Utilisez ce middleware dans AdminController
par exemple,
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');
}
}
C'est tout ce qu'il faut pour le faire fonctionner et aussi pour obtenir json d'utilisation d'administrateur authentifiéAuth::guard('admin')->user()
Modifier - 1
Nous pouvons accéder à l'utilisateur authentifié directement en utilisant Auth::user()
mais si vous avez deux tables d'authentification, vous devez utiliser
Auth::guard('guard_name')->user()
Pour déconnexion
Auth::guard('guard_name')->user()->logout()
Pour l'utilisateur authentifié json
Auth::guard('guard_name')->user()
Édition 2
Maintenant, vous pouvez télécharger Laravel 5.2 multiauth projet mis en œuvre http://imrealashu.in/code/laravel/multi-auth-with-laravel-5-2-2/
Au cas où cela aiderait quelqu'un, et cela pourrait être dû à mon manque de compréhension du middleware, voici ce que j'ai dû faire pour que cela fonctionne (en plus des mesures prises par @imrealashu)...
Dans route.php
:
Route::get('/admin', [
'middleware' => 'admin',
'uses' => 'AdminController@index'
]);
C'est dans le groupe middleware web
. Avant cela, j'ai essayé de le mettre dans un groupe middleware admin
séparé et même dans un groupe auth:admin
mais cela n'a pas fonctionné, cela n'a fonctionné que pour moi lorsque j'ai spécifié le middleware en tant qu'administrateur sur la route elle-même. Je n'ai pas de idée pourquoi c'est mais j'espère que cela évite aux autres de tirer leurs cheveux comme je l'ai fait.
Dans Laravel il y a beaucoup de paquets de générateur de panneau D'administration disponibles. Je préfère Administrateur Du Voyager. Installation facile et brise. Cela peut vous faire économiser une tonne de code. Vous avez juste besoin de comprendre comment cela fonctionne. Ne pas réinventer la roue.
Voyager - Le Laravel Admin Disparu
Une application Laravel avec gentelella Bootstrap admin tempalte.