注册后,如果用户已经登录,请不要登录用户
问题描述:
是的,您阅读正确。让我解释。我正在使用laravel 5.4附带的默认身份验证过程,并且希望允许管理员用户注册新用户。我已经修改了中间件RedirectIfNotAuthenicated
允许访问/register
如果谁在登录的用户是管理员(在我的情况,这意味着他们有一个类型的“1”):注册后,如果用户已经登录,请不要登录用户
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
if(!Auth::user()->type == '1'){
return redirect('/');
}
}
return $next($request);
}
我现在的问题变成,如何内现有的RegisterController
如果帐户是由管理员创建的,我不会在成功注册后登录用户。显然这将涉及一个检查,看看用户当前是否已经登录并且管理员,但是我挂起的位置在该块之后,对我而言,它看起来像是在其他地方正在做的事情?
protected function create(array $data)
{
if(isset($data["director"])){
$this->redirectTo = '/organizations/create';
}
if(Auth::user()->type == '1'){
//create the user and not log them in
} else {
return User::create([
'first_name' => $data['first_name'],
'last_name' => $data['last_name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
}
}
答
首先,您实际上并不需要使用Laravel附带的RegisterController来以admin身份创建用户。无论你使用AdminController,你可以有下面的代码来创建事业的正确验证新用户:
User::create([
'first_name' => $data['first_name'],
'last_name' => $data['last_name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
你只需要坚持各自的表中的用户数据,一旦用户登录,从前端LoginController将处理剩下的事情。
此外,Laravel附带的RegisterController使用RegistersUsers Trait,它具有您在控制器中注意到的附加功能。
Illuminate\Foundation\Auth\RegistersUsers.php
这似乎是处理这种情况的最佳方法。我将逻辑添加到了默认的注册视图,该视图检查用户是来宾还是管理员,以便它可以与单独的管理员控制器重复使用(如果管理员发布到不同的路由)。我主要关心的是在两个不同的地点保持同样的形式。 – commanderZiltoid