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