我需要在Laravel应用程序中注册新用户后禁用自动登录。
我已经找到了旧版本的示例,但自从Laravel 5.4以来,没有AuthController
,而是分为LoginController
和RegisterController
。
我需要在Laravel应用程序中注册新用户后禁用自动登录。
我已经找到了旧版本的示例,但自从Laravel 5.4以来,没有AuthController
,而是分为LoginController
和RegisterController
。
由于您的RegisterController
使用RegistersUsers
trait,因此RegistersUsers
trait的所有方法都可用于RegisterController
。为了防止用户在成功注册后登录,您需要覆盖的方法是register()
。以下是该方法的初始主体:
public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
$this->guard()->login($user);
return $this->registered($request, $user)
?: redirect($this->redirectPath());
}
这行代码:$this->guard()->login($user);
是用户登录的地方。您可以删除它或者修改它以满足您的需求。
我已经在新版本中在守卫旁边添加了Auth::logout();
。
public function register(Request $request)
{
$this->validator($request->all())->validate();
event(new Registered($user = $this->create($request->all())));
\Auth::logout();
return $this->registered($request, $user)
?: redirect($this->redirectPath());
}
Laravel 6怎么做呢?我试图做同样的事情。但是,我认为在/vendor/...文件夹中重写不是一个好的实践。我尝试重写函数"registered",但是当我在我的App/http/Controller/Auth/RegisterController.php中定义了一个受保护的函数registered(...) {...}时,我收到了一个错误。
Argument 1 passed to App\Http\Controllers\Auth\RegisterController::registered() must be an instance of App\Http\Controllers\Auth\Request, instance of Illuminate\Http\Request given, called in C:\wamp\www\presbyteria\vendor\laravel\framework\src\Illuminate\Foundation\Auth\RegistersUsers.php on line 35
RegistersUsers.php
文件中,register
函数中注释掉这一行。$this->guard()->login($user);
vendor/
目录中的文件,这是绝不能做的!相反,你应该在你的AuthController
(或等效文件)中定义一个register()
方法,并相应地进行更改。请参考被接受的答案。 - Ivanka Todorova您可以在RegisterController
中更改$redirectTo
url
为您的url。
或者,您可以在RegisterController
中覆盖RegistersUsers
trait的registered
方法。
use Illuminate\Http\Request;
和use Illuminate\Auth\Events\Registered;
。 - shery089