Laravel 5.3注册后重定向用户

时间:2016-09-21 10:10:40

标签: php laravel-5

我正在使用Laravel 5.3和php artisan命令make:auth来支持注册和登录。在用户注册后,我想将他重定向到一个类似“验证您的电子邮件”的页面,我不希望它像默认情况一样自动登录用户。

我只能想到,在RegisterController的create()方法中,而不是返回用户(我假设它是自动登录的位置),我想重定向到另一个视图。

protected function create(array $data)
{
    $confirmation_code = str_random(30);

    Mail::to($data['email'])->send(new Company($confirmation_code));

    User::create([
        'confirmation_code' => $confirmation_code,
        'password' => bcrypt($data['password']),
        'email' => $data['email']
    ]);

    return redirect()->route('verifyemail');
}

但是我收到了这个错误:Argument 1 passed to Illuminate\Auth\SessionGuard::login() must implement interface Illuminate\Contracts\Auth\Authenticatable, instance of Illuminate\Http\RedirectResponse given, called in C:\xampp\htdocs\app\vendor\laravel\framework\src\Illuminate\Foundation\Auth\RegistersUsers.php on line 32 and defined

我试图覆盖RegistersUsers.php中的register(Request $request)方法来取出登录行,但它仍然不起作用。
有什么想法吗?

编辑:我在登录后将$this->guard()->logout();添加到覆盖的register方法中。它有效,但这不是正确的方法,我想找到另一种解决方案..

5 个答案:

答案 0 :(得分:0)

我会创建自己的寄存器控制器以获得更大的灵活性。并在他们的创建/存储方法创建,然后重定向到您想要的地方。不会花太长时间

答案 1 :(得分:0)

在app / Http / Controllers / Auth / RegisterController中的

在方法创建后添加:

在这里输入代码

public function redirectPatch() 
{
  return "verifyemail";
} 

<强>为例

protected function create(array $data)
{
    $confirmation_code = str_random(30);

    Mail::to($data['email'])->send(new Company($confirmation_code));

    User::create([
        'confirmation_code' => $confirmation_code,
        'password' => bcrypt($data['password']),
        'email' => $data['email']
    ]);

}
public function redirectPatch() 
{
  return "/verifyemail";
} 

答案 2 :(得分:0)

几周以来,我一直在努力寻找解决方案。 要在注册后覆盖默认URL,只需在create function中添加以下内容:

$this->redirectTo = '/url-after-register';

就像这样

protected function create(array $data) {
    $this->redirectTo = '/url-after-register';

    return User::create([...]);
}

答案 3 :(得分:0)

谢谢!我已经实施了您的解决方案或者您可以覆盖您班级中的注册方法并重定向到您的特定路线。

protected function registered(Request $request, $user)
{
    $this->guard()->logout();
    return Redirect::route('your.route');
}

答案 4 :(得分:0)

在RegisterController.php中使用这些方法

public function register(Request $request)
{
    $this->validator($request->all())->validate();

    event(new Registered($user = $this->create($request->all())));

    Mail::to($user->email)->send(new ConfirmationEmail($user));

    return back()->with('status', 'Thanks for signing up! Please check your email.');
}

public function confirmEmail($confirmation_code)
{
  User::whereConfirmationCode($confirmation_code)->firstOrFail()->hasVerified();
  return redirect('login')->with('status', 'You have successfully verified your account. Please Login.');
}
相关问题