我尝试使用管理员防护,但它在
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']);
});
});
为了解决此问题,我已将
SESSION_DRIVER
文件中的 file
更新为 .env
。
因此只需要在
.env
文件中进行微小的更改,如下所示:
更换
SESSION_DRIVER=database
与
SESSION_DRIVER=file