我正在尝试设置 Laravel 注册页面,以便 /register 仅在以下情况下可用:
USER
→IS AUTHENTICATED
=TRUE
和
USER
→TYPE
=“STAFF
”(存储在数据库中)
需要修改哪个文件,以便员工用户可以注册新的患者用户?在这种情况下,普通/患者用户的公共注册将被关闭。
我正在尝试设置 Laravel 注册页面,以便 /register 仅在以下情况下可用:
USER
→ IS AUTHENTICATED
=TRUE
和
USER
→ TYPE
=“ STAFF
”(存储在数据库中)需要修改哪个文件,以便员工用户可以注册新的患者用户?在这种情况下,普通/患者用户的公共注册将被关闭。
修改 Laravel 自带的 auth 文件...
对于初学者,请在注册后禁用自动登录,以便登录的员工用户不会立即切换到新注册的患者用户。在您的 RegisterController ( ) 中覆盖 register() app/Http/Controllers/Auth
:
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);
即在原始的 RegisterController register() 中。
然后,如果用户进入注册视图但不是员工,您将需要创建一个新的中间件来重定向用户。用于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']);
}
客人和非员工用户现在应该无法进行注册!我在自己的项目中实现了类似的东西,如果有什么问题请告诉我。
这是假设您使用的是内置身份验证,但对于第一部分,您希望将身份验证中间件添加到 RegisterController 的构造函数 (app/Http/Controllers/Auth)
public function __construct()
{
$this->middleware('auth');
}
这将要求在注册之前对用户进行身份验证
对于第二部分......这在很大程度上取决于你想如何控制事物,但我想说的最好方法是看看https://laracasts.com/series/whats-new-in-laravel-5- 1/集/13
我按照它来设置我的,非常直接和更清洁的方式来处理这个 imo