中间件不符合条件 - Laravel 5.7
Middleware not following the condition - Laravel 5.7
我正在尝试在 Laravel 5.7 中实施用户注册系统,但我遇到了问题。
我有两个 table 用于用户-管理员(通过复制默认 Laravel 授权创建),
新路由,新的管理员中间件。使用守卫时一切正常。
我试图通过添加 Approve/Disapprove 功能来限制用户登录。
我向用户 table 添加了一个额外的列 - admin(boolean)。
在登录控制器 - LoginController.php 页面中,我添加了
protected function authenticated($request, $user)
{
if ( $request->user()->admin != 1)
// if($user->admin != 1)
{
return redirect()->route('approval');
}
else
{
return redirect('/engineer');
}
}
因此,当管理员为 1 时,我被定向到“/工程师”,而在其他情况下,我被定向到 'approval'。
如愿以偿!
我现在面临的问题是,如果我尝试访问 'engineer'
使用未经批准的用户我可以访问该页面。我不确定如何限制它。该页面仍然限制在 public.
由于controller会被user和admin访问,所以我在controller中使用了__construct
web.php
Route::resource('engineer', 'engineerController');
engineerController.php
public function __construct()
{
$this->middleware('auth:web,admin');
}
我的理解是,只有在用户登录和退出后才会检查条件。
是否需要创建一个新的中间件来保持授权页面的完整性?
我是一名自学者,也是 laravel 的新手。我很确定我没有遵循正确的做法。我开始了一些事情,并试图跟随它直到完成。请指导我完成它。
伴随着它,请让我如何做得更好。
您需要定义一个中间件来检查工程师是否获得批准。
显然,例如,您还需要将其保存在 is_approved
列中。
<?php
namespace App\Http\Middleware;
use Closure;
class CheckEngineerApproval
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (! auth()->user->is_approved) {
return redirect('user.approve');
}
return $next($request);
}
}
然后,将它添加到内核中的 $routeMiddleware
数组中。
protected $routeMiddleware = [
//
//
'engineer.approved' => \App\Http\Middleware\CheckEngineerApproval::class,
];
最后,您还可以在控制器的构造函数中添加中间件。
public function __construct()
{
$this->middleware(['auth:web','admin','engineer.approved']);
}
我正在尝试在 Laravel 5.7 中实施用户注册系统,但我遇到了问题。
我有两个 table 用于用户-管理员(通过复制默认 Laravel 授权创建), 新路由,新的管理员中间件。使用守卫时一切正常。
我试图通过添加 Approve/Disapprove 功能来限制用户登录。
我向用户 table 添加了一个额外的列 - admin(boolean)。
在登录控制器 - LoginController.php 页面中,我添加了
protected function authenticated($request, $user)
{
if ( $request->user()->admin != 1)
// if($user->admin != 1)
{
return redirect()->route('approval');
}
else
{
return redirect('/engineer');
}
}
因此,当管理员为 1 时,我被定向到“/工程师”,而在其他情况下,我被定向到 'approval'。
如愿以偿!
我现在面临的问题是,如果我尝试访问 'engineer' 使用未经批准的用户我可以访问该页面。我不确定如何限制它。该页面仍然限制在 public.
由于controller会被user和admin访问,所以我在controller中使用了__construct
web.php
Route::resource('engineer', 'engineerController');
engineerController.php
public function __construct()
{
$this->middleware('auth:web,admin');
}
我的理解是,只有在用户登录和退出后才会检查条件。
是否需要创建一个新的中间件来保持授权页面的完整性?
我是一名自学者,也是 laravel 的新手。我很确定我没有遵循正确的做法。我开始了一些事情,并试图跟随它直到完成。请指导我完成它。
伴随着它,请让我如何做得更好。
您需要定义一个中间件来检查工程师是否获得批准。
显然,例如,您还需要将其保存在 is_approved
列中。
<?php
namespace App\Http\Middleware;
use Closure;
class CheckEngineerApproval
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (! auth()->user->is_approved) {
return redirect('user.approve');
}
return $next($request);
}
}
然后,将它添加到内核中的 $routeMiddleware
数组中。
protected $routeMiddleware = [
//
//
'engineer.approved' => \App\Http\Middleware\CheckEngineerApproval::class,
];
最后,您还可以在控制器的构造函数中添加中间件。
public function __construct()
{
$this->middleware(['auth:web','admin','engineer.approved']);
}