【问题标题】:Laravel 5 restrict access to pages using middlewareLaravel 5 使用中间件限制对页面的访问
【发布时间】:2016-08-12 05:52:30
【问题描述】:

我正在做一个 laravel 项目,我需要限制对某些页面的访问,以便只有经过身份验证的用户才能查看该页面。

为此,创建了一个中间件:php artisan make:middleware OnlyRegisteredUser
并在 App\Http\kernel.php 内的 $routemiddleware 中注册为

'onlyregistereduser' => \App\Http\Middleware\OnlyRegisteredUser::class,

这就是类。如果未登录,它将用户重定向到auth/login

    public function handle($request, Closure $next, $right=null)
{
    $user = $request->user();

    if ($user && $user->onlyregistereduser()) {
        return $next($request);
    }

    return redirect('auth/login');
}

这是我的路线:

Route::get('admin/poem', ['middleware' => 'onlyregistereduser:admin', 'uses'=>'PoemsController@poem']);

admin 是传递给我的中间件的参数。它取自我的用户模型,它有一个“枚举”列,如下所示:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
         //...
        $table->enum('rights', ['admin', 'guest'])->nullable();
         // ...
    });
}

现在为了限制对我的控制器方法的一些的访问,例如创建,我向我的PoemsController 添加了一个构造函数,如图所示:

public function __construct()
{
   $this->middleware('onlyregistereduser');
}

我现在的问题是,这导致到PoemsController 的每条路由都将我重定向到登录页面。再次登录后,它并没有将我带到我打算访问的页面。它把我带到了主页。我想要的是限制对某些控制器方法的访问,而不是所有这些方法,并且能够在用户登录后重定向到预期的页面。 我希望你能理解我的问题。 任何帮助将不胜感激。

【问题讨论】:

    标签: laravel-5 roles middleware


    【解决方案1】:

    从构造函数中删除中间件,您不必将中间件添加到路由和构造函数中。那应该可以解决您的“。我想要的是限制对某些控制器方法的访问,而不是全部”问题。

    对于其他问题,像这样修改你的中间件

    public function handle($request, Closure $next, $right=null)
    {
        $user = $request->user();
    
        if ($user && $user->onlyregistereduser()) {
            return $next($request);
        }
        $request_url = $request->path();
        session()->put('login_refferrer', $request_url);
        return redirect('auth/login');
    }
    

    登录后重定向用户之前

     if(session()->has('login_refferrer')){
      $url = session()->pull('login_refferrer');
      return redirect($url);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-15
      • 2018-06-23
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-06
      相关资源
      最近更新 更多