在 Laravel 注册后禁用自动登录。

18

我需要在Laravel应用程序中注册新用户后禁用自动登录。

我已经找到了旧版本的示例,但自从Laravel 5.4以来,没有AuthController,而是分为LoginControllerRegisterController

5个回答

40

由于您的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); 是用户登录的地方。您可以删除它或者修改它以满足您的需求。


@ivanka,我对register方法底部的registered方法很好奇,因为它使用了三元运算符,我想知道它的作用是什么,我能否只使用redirect()->back()->with('info', 'something')来替换它。 - white-comet
4
在RegisterController中,还需要包含use Illuminate\Http\Request;use Illuminate\Auth\Events\Registered; - shery089
抱歉,但是到底在哪里可以找到 Laravel 默认的 "register" 方法,而不带任何自定义修改?因为我已经四处寻找了,连文档中都没有找到相关信息。 - ADHDisDEV
@ADHDisDEV 你使用的是哪个版本的Laravel?较新的版本将auth分成了两个包:Laravel BreezeLaravel Jetstream。如果你使用的是Breeze,它会在你的应用程序中发布一个新的控制器,你可以删除这行代码 - Ivanka Todorova

2

我已经在新版本中在守卫旁边添加了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());
}

1

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

2
这里有一个我使用的方法:https://laraveldaily.com/9-things-you-can-customize-in-laravel-registration/ - SamCodeBad

0
如果您使用默认的注册路由,您可以像这样做...
RegistersUsers.php文件中,
register函数中注释掉这一行。
$this->guard()->login($user);

我希望这能帮到你!

9
这个答案建议编辑vendor/目录中的文件,这是绝不能做的!相反,你应该在你的AuthController(或等效文件)中定义一个register()方法,并相应地进行更改。请参考被接受的答案。 - Ivanka Todorova
是的。正如Ivanka Todorova所说,不建议编辑框架的核心文件。 - Wolverine

-4

您可以在RegisterController中更改$redirectTo url为您的url。 或者,您可以在RegisterController中覆盖RegistersUsers trait的registered方法。


redirectTo将会跳转到已登录的页面。 - Wraith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接