Laravel 5.8:多用户身份验证问题

时间:2019-09-12 08:44:13

标签: laravel authentication laravel-5 admin middleware

在laravel项目中,我有两个用户(管理员和用户)。

我开始了管理员的身份验证。

现在,当我在CRUD应用程序中转到创建页面(http://127.0.0.1:8000/admin/posts/create)时,它将重定向到http://127.0.0.1:8000/login

很高兴有人能给我一个解决方案,以返回到http://127.0.0.1:8000/admin/login页面,该页面是管理员侧登录页面。

这是我的密码。

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在我的中间件文件夹中

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     公共功能__construct()

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

1 个答案:

答案 0 :(得分:1)

在auth.php中添加管理员保护

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

并添加提供者数组

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

添加两个中间件,

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

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

在kernel.php中注册您的中间件

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

在您的AdminController.php中添加

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

然后

在您的LoginController.php中添加

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

在web.php

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