注册后,如果用户已经登录,请不要登录用户

问题描述:

是的,您阅读正确。让我解释。我正在使用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 
+0

这似乎是处理这种情况的最佳方法。我将逻辑添加到了默认的注册视图,该视图检查用户是来宾还是管理员,以便它可以与单独的管理员控制器重复使用(如果管理员发布到不同的路由)。我主要关心的是在两个不同的地点保持同样的形式。 – commanderZiltoid