【问题标题】:Middleware not restricting the routes using laravel 5.4.6中间件不使用 laravel 5.4.6 限制路由
【发布时间】:2017-08-13 11:33:28
【问题描述】:

我在处理中间件时遇到了问题,

这里是数据库用户

这里是 AdminMiddleware 代码:

public function handle($request, Closure $next, $guard = null)
{
    if (Auth::guard($guard)->check() && Auth::user()->admin == 1) {
        return $next($request);
    }else{
        return redirect('/admin-login');
    }


}

这里是路线代码:

Route::group(['middleware' => 'admin'], function () {

Route::get('/dashboard', 'BackEnd\HomeController@getDashboard');
});

但是当我登录时它不起作用并重定向到仅登录页面,请指导我如何处理中间件问题。

【问题讨论】:

  • 为什么你的密码是纯文本而不是bcrypt?
  • 对不起,这是为了发布问题的演示目的

标签: php laravel middleware


【解决方案1】:

您想要一组仅限管理员的路由,对吗? 您可以改用 can 中间件

Route::group(['middleware' => 'can:admin'], function () {
    Route::get('/dashboard', 'BackEnd\HomeController@getDashboard');
});

这将检查您可以在Providers/AuthServiceProvider.php 中定义的授权策略:

Gate::define('admin', function (User $user) {
    return $user->admin == 1;
});

如果检查失败,您将收到“未经授权”的响应。

如果您想要重定向到登录页面,您可以坚持使用自定义中间件,它应该只是

if (Auth::check() && Auth::user()->admin == 1)

Adnan Mumtaz's answer是正确的,密码在数据库中不应该是纯文本,而是应该加密(而不是保存bcrypt('12345')的结果)。

【讨论】:

    【解决方案2】:

    你的密码没有被加密,你应该这样做

    echo bycryp(12345) // paste this in db and then try again
    

    我希望这个没有测试过

    public function handle($request, Closure $next, $guard = null)
    {
      if (Auth::check() && Auth::user()->admin == 1) {
        return $next($request);
      } else {
        return redirect('/admin-login');
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-06-12
      • 1970-01-01
      • 2015-12-17
      • 2019-10-05
      • 2017-12-18
      • 2020-11-12
      • 2018-09-25
      • 2018-07-21
      • 2019-11-20
      相关资源
      最近更新 更多