Can Anyone Explain Laravel 5.2 Multi Auth With Example


Answer :

After lots of digging and lots of questions & answers I have finally managed to work Laravel 5.2 Multi Auth with two table, So I'm writing Answer of my own Question.

How to implement Multi Auth in Larvel 5.2

As Mentioned above. Two table admin and users

Laravel 5.2 has a new artisan command.

php artisan make:auth

it will generate basic login/register route, view and controller for user table.

Make a admin table as users table for simplicity.

Controller For Admin
app/Http/Controllers/AdminAuth/AuthController
app/Http/Controllers/AdminAuth/PasswordController
(note: I just copied these files from app/Http/Controllers/Auth/AuthController here)

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

Add two methods and specify $redirectTo and $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'); }   

it will help you to open another login form for admin

creating a middleware for 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); } 

}

register middleware in kernel.php

 protected $routeMiddleware = [     'admin' => \App\Http\Middleware\RedirectIfNotAdmin::class, ]; 

use this middleware in AdminController e.g.,

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

That's all needed to make it working and also to get json of authenticated admin use
Auth::guard('admin')->user()

Edit - 1
We can access authenticated user directly using
Auth::user() but if you have two authentication table then you have to use

Auth::guard('guard_name')->user()   

for logout

Auth::guard('guard_name')->user()->logout() 

for authenticated user json

Auth::guard('guard_name')->user()   

Edit 2

Now you can download Laravel 5.2 Multiauth implemented Project http://imrealashu.in/code/laravel/multi-auth-with-laravel-5-2-2/


In case this helps anyone, and this may just be due to my lack of understanding of middleware, here's what I had to do to get this working (in addition to the steps taken by @imrealashu)...

In route.php:

Route::get('/admin', [   'middleware' => 'admin',   'uses' => 'AdminController@index' ]); 

This is in the web middleware group. Before this I tried putting it in a separate admin middleware group and even in an auth:admin group but this didn't work, it only worked for me when I specified the middleware as admin on the route itself. I have no idea why this is but I hope it saves others from pulling their hair out like I did.


Comments

Popular posts from this blog

Are Regular VACUUM ANALYZE Still Recommended Under 9.1?

Can Feynman Diagrams Be Used To Represent Any Perturbation Theory?