Laravel 5 Laravel 5使用中间件限制对页面的访问
我正在从事一个laravel项目,我需要限制对某些页面的访问,以便只有经过身份验证的用户才能查看该页面 为此,创建了一个中间件:Laravel 5 Laravel 5使用中间件限制对页面的访问,laravel-5,roles,middleware,Laravel 5,Roles,Middleware,我正在从事一个laravel项目,我需要限制对某些页面的访问,以便只有经过身份验证的用户才能查看该页面 为此,创建了一个中间件:php artisan make:middleware OnlyRegisteredUser 并在App\Http\kernel.php内部的$routemddleware中将其注册为 'onlyregistereduser'=>\App\Http\Middleware\onlyregistereduser::class, 这就是课堂。如果未登录,它会将用户重定向到au
php artisan make:middleware OnlyRegisteredUser
并在
App\Http\kernel.php
内部的$routemddleware
中将其注册为'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
是传递给我的中间件的参数。它取自我的用户模型,其中有一个“enum”列,如下所示:
public function up()
{
Schema::create('users', function (Blueprint $table) {
//...
$table->enum('rights', ['admin', 'guest'])->nullable();
// ...
});
}
现在,为了限制对我的一些控制器方法的访问,例如create,我在我的poemcontroller
中添加了一个构造函数,如下所示:
public function __construct()
{
$this->middleware('onlyregistereduser');
}
我现在的问题是,这导致到PoemController
的每一条路由都将我重定向到登录页面。再次登录后,它不会把我带到我打算访问的页面。它把我带到了主页。我想要的是限制对控制器方法的访问,而不是全部,并且能够在用户登录后重定向到预期页面。
我希望你能理解我的问题。
任何帮助都将不胜感激 从构造函数中删除中间件,您不必同时向路由和构造函数添加中间件。这应该可以解决你的“.我想要的是只限制对一些控制器方法的访问,而不是所有的”问题 对于其他问题,请像这样修改中间件
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);
}