【问题标题】:Middleware is not working properly in Laravel中间件在 Laravel 中无法正常工作
【发布时间】:2020-08-31 20:44:03
【问题描述】:

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

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

但是,当我将自定义 middleware 添加到我的 route 以检查用户身份验证时,尽管我已经提供了正确的电子邮件和密码以进行登录,但应用程序始终将我带到登录页面而不是带我到 @ 987654325@.

userController.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();
}

dashboardController.php

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

adminAuthenticate 中间件

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

    return $next($request);
}

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

web.php

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

kernel.php

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

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

【问题讨论】:

  • 你能显示你的 kernel.php 吗??
  • @user11622164......更新帖子
  • @NicoHaase ....我在中间件中使用dd() 来检查用户激活...结果没问题...注销时用户激活显示为空...但不要'不重定向到路由...
  • 您希望运行 return redirect('/dashboard');用户登录后对吗?你可以在这一行之前dd,也许它永远不会进入这种情况,还要检查你是否继承了Middleware\Authenticate::class,因为有一个检查用户是否没有登录,重定向到lgin页面。
  • @Momo....奇怪的是,如果我从/dashboard 路由中删除middleware('adminAuth');...然后仪表板页面在成功登录后出现.....

标签: php laravel laravel-6 laravel-middleware laravel-authentication


【解决方案1】:

在我审核您的代码之后。我看到了用户控制器的错误状态。

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

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

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

【讨论】:

  • 值是数据库“用户名”数据字段中的电子邮件......所以身份验证没有问题
猜你喜欢
  • 1970-01-01
  • 2020-04-22
  • 1970-01-01
  • 2013-01-26
  • 2020-03-19
  • 1970-01-01
  • 2015-12-03
  • 2021-05-23
  • 2017-05-05
相关资源
最近更新 更多