首页 > 解决方案 > 中间件在 Laravel 中无法正常工作

问题描述

我的 Laravel 项目中有一个管理面板。

有一个login page和一个dashboard page。当用户成功登录时,应用程序将用户带到仪表板页面。

但是从我将自定义添加middleware到我route以检查用户身份验证时,虽然我已经提供了正确的电子邮件和密码以进行日志记录,但应用程序一直将我带到登录页面而不是带我到dashboard page.

用户控制器.php

public function admin_login(Request $request)
{
    $rules = [
        'email' => 'required',
        'password' => 'required'
    ];

    $customMessages = [
        'email.required' => 'Email Required',
        'password.required' => 'Password Required'
    ];

    $this->validate($request, $rules, $customMessages);

    if (!User::where('username', '=', $request->email)->exists()) {

        Session::flash('message', 'You are not an Admin!'); 
        Session::flash('alert-class', 'alert-danger'); 
        return back();
    }

    if (Auth::attempt(['username' => $request->email, 'password' => $request->password]))
    {
        return redirect('/dashboard');
    }

    Session::flash('message', 'Password is Incorrect!'); 
    Session::flash('alert-class', 'alert-info'); 
    return back();
}

仪表板控制器.php

public function index()
{
     return view('admin.dashboard.dashboard');
}

管理员身份验证中间件

public function handle($request, Closure $next)
{
    if (!Auth::check()) {
            return redirect()->route('login_page');
    }

    return $next($request);
}

我已将自定义中间件添加到kernel.php

网页.php

Route::get('/admin-login', 'userController@index')->name('login_page');
Route::get('/dashboard', 'dashboardController@index')->middleware('adminAuth');

内核.php

protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'adminAuth' => \App\Http\Middleware\adminAuthenticate::class, //custom middleware
    ];

无法理解问题出在哪里。有人帮忙吗?提前致谢

标签: phplaravellaravel-6laravel-middlewarelaravel-authentication

解决方案


在我查看您的代码之后。我看到了用户控制器错误的情况。

if (!User::where('username', '=', $request->email)->exists()) {

   Session::flash('message', 'You are not an Admin!'); 
   Session::flash('alert-class', 'alert-danger'); 
   return back();
}

您输入了电子邮件,但您的条件与用户名相比,因此身份验证将是错误的。我希望这可以帮助你。谢谢!


推荐阅读