Laravel 11 与 MongoDB:Guards 无法在中间件中工作

问题描述 投票:0回答:1

我尝试使用管理员防护,但它在

Laravel 11
的中间件中不起作用。我已将
MongoDB
与 Laravel 11 连接起来以管理其数据库。

我的管理员登录功能如下所示,其中

Auth::guard('admin')
工作正常:

public function login(Request $request){
        if($request->isMethod('post')){
            $data = $request->all();
            if(Auth::guard('admin')->attempt(['email'=>$data['email'],'password'=>$data['password']])) {
                //echo "<pre>"; print_r(Auth::guard('admin')->user()); die;
                return redirect('admin/dashboard');
            }else{
                 return redirect()->back()->with('error_message','Invalid Email or Password');
            }
        }
        return view('admin.login');
    }

但是

Auth::guard('admin')
在管理中间件中不起作用,我没有收到任何数据。我的管理中间件文件如下所示:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use Illuminate\Support\Facades\Route;
use Auth;

class Admin
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
    public function handle(Request $request, Closure $next): Response
    {
        // echo "<pre>"; print_r(Auth::guard('admin')->user()); die;
        if(!Auth::guard('admin')->check()) {
            return redirect('/admin/login');
        }
        return $next($request);
    }
}

我已经更新了位于 config uth.php 的 auth.php 文件,以设置管理员在驱动程序中分配会话和提供程序中的管理员的保护,如下所示:

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],
    ],

还为管理员设置提供程序,以便在模型中的驱动程序和管理类中分配 eloquent。

'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => env('AUTH_MODEL', App\Models\User::class),
        ],

        'admins' => [
            'driver' => 'eloquent',
            'model' => App\Models\Admin::class,
        ],

由于 Laravel 11 中的更新,我在 app.php 文件中添加了管理中间件,如下所示:

->withMiddleware(function (Middleware $middleware) {
        $middleware->alias(['admin' => \App\Http\Middleware\Admin::class]);
})

我的管理路线如下所示:

Route::prefix('/admin')->namespace('App\Http\Controllers\Admin')->group(function(){
    //All the admin routes will be defined here...
    Route::match(['get','post'],'login',[AdminController::class,'login']);
    Route::group(['middleware'=>['admin']],function(){
        Route::match(['get','post'],'dashboard',[AdminController::class,'dashboard']);
    });
});
laravel mongodb laravel-middleware laravel-11 laravel-guard
1个回答
0
投票

为了解决此问题,我已将

SESSION_DRIVER
文件中的
file
更新为
.env

因此只需要在

.env
文件中进行微小的更改,如下所示:

更换

SESSION_DRIVER=database

SESSION_DRIVER=file
© www.soinside.com 2019 - 2024. All rights reserved.