How to create multi auth in laravel 5.6?

后端 未结 1 1841
迷失自我
迷失自我 2020-12-28 11:52

I used to be for laravel 5.5 and earlier than https://github.com/Hesto/multi-auth .

But this repository don\'t update for laravel 5.6.

How to create multi au

相关标签:
1条回答
  • 2020-12-28 12:32

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

    How to implement Multi Auth in Larvel

    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()

    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()  
    
    0 讨论(0)
提交回复
热议问题