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.
entrez la description de l'image ici

Il y a une autre méthode mentionnée dans les documents de laravel pour utiliser un garde qui ne fonctionne pas aussi.

entrez la description de l'image ici

Il serait très utile que quelqu'un puisse résoudre les problèmes et me corriger si je me trompe.

153
demandé sur imrealashu 2016-01-05 18:01:03

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 Admin
app/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/

188
répondu imrealashu 2016-06-28 20:31:49

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.

2
répondu Sworrub Wehttam 2016-03-13 02:02:14

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.

2
répondu sathish R 2017-06-27 17:04:50