Php Laravel 5-仅允许在验证后注册,并允许管理员注册
我正在尝试设置Laravel注册页面,使/register仅在以下情况下可用:Php Laravel 5-仅允许在验证后注册,并允许管理员注册,php,laravel,laravel-5,laravel-authorization,Php,Laravel,Laravel 5,Laravel Authorization,我正在尝试设置Laravel注册页面,使/register仅在以下情况下可用: 用户→ 已通过身份验证=TRUE 及 用户→ 类型=“员工”(存储在数据库中) 需要修改哪个文件,以便员工用户可以注册新的患者用户?在这种情况下,普通/患者用户的公共注册将被关闭。这是假设您正在使用内置身份验证,但在第一部分中,您希望将身份验证中间件添加到RegisterController的构造函数(app/Http/Controllers/auth)中 这就要求用户在注册前必须经过身份验证 第二部分。。。
→ <代码>已通过身份验证=用户
TRUE
→ <代码>类型=“用户
”(存储在数据库中)员工
需要修改哪个文件,以便员工用户可以注册新的患者用户?在这种情况下,普通/患者用户的公共注册将被关闭。这是假设您正在使用内置身份验证,但在第一部分中,您希望将身份验证中间件添加到RegisterController的构造函数(app/Http/Controllers/auth)中 这就要求用户在注册前必须经过身份验证 第二部分。。。这在很大程度上取决于你想如何控制事情,但我想说的最好的方法是看一看
我遵循这一点来设置我的,非常直接和更干净的方法来处理这个imo,修改随Laravel提供的auth文件 首先,在注册后禁用自动登录,以便登录的员工用户不会立即切换到新注册的患者用户。使用以下命令覆盖RegisterController(
app/Http/Controllers/Auth
)中的register():
public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
return $this->registered($request, $user)
?: redirect($this->redirectPath());
}
您这样做是为了省去一行,$this->guard()->login($user)代码>,位于原始注册表控制器寄存器()中
然后,您需要创建一个新的中间件来重定向用户,如果他们转到register视图,但不是staff。使用php-artisan-make:middleware-IsStaff
在app/Http/middleware
目录中创建一个新类:
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
class IsStaff
{
public function handle($request, Closure $next)
{
if (auth()->user()->type != 'Staff') {
return redirect('home');
}
return $next($request);
}
}
您需要在app/Http/Kernel.php
中注册新的中间件:
protected $routeMiddleware = [
'isStaff' => \App\Http\Middleware\IsStaff::class,
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
];
回到RegisterController中,使用内置的auth中间件和新的IsStaff中间件:
public function __construct()
{
$this->middleware(['auth', 'isStaff']);
}
现在,非工作人员的来宾和用户将无法进行注册!我在自己的项目中实现了类似的功能,如果有问题,请告诉我。欢迎使用堆栈溢出:-)请查看以及如何创建堆栈溢出。这将有助于得到有用的答案。
public function __construct()
{
$this->middleware(['auth', 'isStaff']);
}