Yohei Umezu
Yohei Umezu

Reputation: 431

Laravel 5.8: Multi users authentication issue

in my laravel project, I have two users (Admins and Users).

I got started admins' authentification.

Now when I go to a create page (http://127.0.0.1:8000/admin/posts/create) in my CRUD application, it redirects to http://127.0.0.1:8000/login.

I am glad if someone gives me a solution to go back to http://127.0.0.1:8000/admin/login page which is admin side login page.

Here is my codes.

web.php

Route::prefix('admin')->group(function(){
    Route::get('/login', 'Auth\AdminLoginController@showLoginForm')->name('admin.login');
    Route::post('/login', 'Auth\AdminLoginController@login')->name('admin.login.submit');
    Route::get('/', 'AdminController@index')->name('admin.dashboard');
    Route::resource('categories','CategoriesController');
    Route::resource('posts', 'PostsController')->middleware('auth');
    Route::get('trashed-posts', 'PostsController@trashed')->name('trashed-posts.index');
    Route::PUT('restore-post/{post}', 'PostsController@restore')->name('restore-posts');
});

VerifyCategoriesCount.php in my middleware folder

public function handle($request, Closure $next)
    {
        if (Auth::check()) {
            if (Auth::user()->role == 'Admin') {
                return $next($request);
            }
         }
        return redirect('/admin/');

    }

kernel.php

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'verifyCategoriesCount' => VerifyCategoriesCount::class
    ];

postsController.php public function __construct()

 {
        $this->middleware('VerifyCategoriesCount')->only('store');
        $this->middleware('admin')->except('index');
    }

Upvotes: 0

Views: 456

Answers (1)

Mahfuz Shishir
Mahfuz Shishir

Reputation: 841

Add an admin guard in auth.php

'admin' => [
    'driver' => 'session',
    'provider' => 'admins', //table name
],

And add providers array

'admins' => [
    'driver' => 'eloquent',
    'model' => App\Admin::class, //Bind your Admin Model
], 

Add two middleware,

class AdminRedirectIfAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (Auth::guard('admin')->check()) {
            return redirect('/admin/home');
        }
        return $next($request);
    }
}

And

class AdminRedirectIfNotAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if (!Auth::guard('admin')->check()) {
            return redirect('/admin/login');
        }
        return $next($request);
    }
}

Register your middlewares in kernel.php

'admin.auth' => \App\Http\Middleware\AdminRedirectIfNotAuthenticated::class,
'admin.guest' => \App\Http\Middleware\AdminRedirectIfAuthenticated::class,

In your AdminController.php add,

public function __construct()
{
    $this->middleware('admin.auth');
}

And,

In your LoginController.php add,

public function __construct()
{
    $this->middleware('admin.guest');
}

In web.php

Route::get('/admin/login', 'Admin\LoginController@showLoginForm')->name('admin.login');
Route::get('/admin/home', 'Admin\AdminController@home')->name('home');

Upvotes: 1

Related Questions