Skip to content

Commit aafb8b7

Browse files
committed
Add ability to change redirect routes
1 parent 91e1296 commit aafb8b7

File tree

4 files changed

+66
-5
lines changed

4 files changed

+66
-5
lines changed

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,15 @@ This package comes with a language file, that allows you to modify the error / c
7474
might see. In addition to that, you can change the notification class that will be used to send the confirmation code
7575
completely, by changing it in the `config/confirmation.php` file.
7676

77+
### Change redirect routes
78+
You can change all possible redirect routes by including these values either as properties in your registration controller, or as methods returning the route/URL string:
79+
80+
- `redirectConfirmationTo`
81+
- `redirectAfterRegistrationTo`
82+
- `redirectAfterResendConfirmationTo`
83+
84+
They all default to `route('login')`.
85+
7786
### The Confirmed Event
7887
On successful email confirmation, this package dispatches a `Confirmed` event, in order for you to conveniently handle
7988
any custom logic, such as sending a welcome email or automatically logging the user in.

src/Traits/RegistersUsers.php

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,48 @@ trait RegistersUsers
1212
register as baseRegister;
1313
}
1414

15+
/**
16+
* Get redirect path after a successful confirmation.
17+
*
18+
* @return string
19+
*/
20+
public function redirectAfterConfirmationPath()
21+
{
22+
if (method_exists($this, 'redirectConfirmationTo')) {
23+
return $this->redirectConfirmationTo();
24+
}
25+
26+
return property_exists($this, 'redirectConfirmationTo') ? $this->redirectConfirmationTo : route('login');
27+
}
28+
29+
/**
30+
* Get redirect path after a registration that still needs to be confirmed.
31+
*
32+
* @return string
33+
*/
34+
public function redirectAfterRegistrationPath()
35+
{
36+
if (method_exists($this, 'redirectAfterRegistrationTo')) {
37+
return $this->redirectAfterRegistrationTo();
38+
}
39+
40+
return property_exists($this, 'redirectAfterRegistrationTo') ? $this->redirectAfterRegistrationTo : route('login');
41+
}
42+
43+
/**
44+
* Get redirect path after the confirmation was sent.
45+
*
46+
* @return string
47+
*/
48+
public function redirectAfterResendConfirmationPath()
49+
{
50+
if (method_exists($this, 'redirectAfterResendConfirmationTo')) {
51+
return $this->redirectAfterResendConfirmationTo();
52+
}
53+
54+
return property_exists($this, 'redirectAfterResendConfirmationTo') ? $this->redirectAfterResendConfirmationTo : route('login');
55+
}
56+
1557
/**
1658
* Confirm a user with a given confirmation code.
1759
*
@@ -31,7 +73,7 @@ public function confirm($confirmation_code)
3173
event(new Confirmed($user));
3274

3375
return $this->confirmed($user)
34-
?: redirect(route('login'))->with('confirmation', __('confirmation::confirmation.confirmation_successful'));
76+
?: redirect($this->redirectAfterConfirmationPath())->with('confirmation', __('confirmation::confirmation.confirmation_successful'));
3577
}
3678

3779
/**
@@ -47,7 +89,7 @@ public function resendConfirmation(Request $request)
4789
$user = $model->findOrFail($request->session()->pull('confirmation_user_id'));
4890
$this->sendConfirmationToUser($user);
4991

50-
return redirect(route('login'))->with('confirmation', __('confirmation::confirmation.confirmation_resent'));
92+
return redirect($this->redirectAfterResendConfirmationPath())->with('confirmation', __('confirmation::confirmation.confirmation_resent'));
5193
}
5294

5395
/**
@@ -65,7 +107,7 @@ public function register(Request $request)
65107
$this->sendConfirmationToUser($user);
66108

67109
return $this->registered($request, $user)
68-
?: redirect(route('login'))->with('confirmation', __('confirmation::confirmation.confirmation_info'));
110+
?: redirect($this->redirectAfterRegistrationPath())->with('confirmation', __('confirmation::confirmation.confirmation_info'));
69111
}
70112

71113
/**

tests/ConfirmationTest.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ public function it_adds_confirmation_codes_to_registered_users()
2828
$this->assertNull($user->confirmed_at);
2929
$this->assertNotNull($user->confirmation_code);
3030

31+
$response->assertRedirect('redirectAfterRegistration');
32+
3133
$response->assertSessionHas('confirmation', __('confirmation::confirmation.confirmation_info'));
3234

3335
Notification::assertSentTo($user, ConfirmEmail::class);
@@ -90,6 +92,8 @@ public function it_can_resend_confirmation_codes()
9092

9193
$response->assertSessionHas('confirmation', __('confirmation::confirmation.confirmation_resent'));
9294

95+
$response->assertRedirect('redirectAfterConfirmationResent');
96+
9397
Notification::assertSentTo($user, ConfirmEmail::class);
9498
}
9599

@@ -109,7 +113,7 @@ public function it_can_confirm_valid_codes()
109113

110114
$response->assertSessionHas('confirmation', __('confirmation::confirmation.confirmation_successful'));
111115

112-
$response->assertRedirect('/login');
116+
$response->assertRedirect('/redirectConfirmationUrl');
113117
}
114118

115119
/** @test */
@@ -162,7 +166,7 @@ public function it_dispatches_confirmed_event_on_successful_confirmation()
162166
return $e->user->email === $user->email;
163167
});
164168

165-
$response->assertRedirect('/login');
169+
$response->assertRedirect('/redirectConfirmationUrl');
166170
}
167171

168172
/** @test */

tests/Controllers/RegisterController.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ class RegisterController extends Controller
2424
*/
2525
use AuthorizesRequests, DispatchesJobs, ValidatesRequests, RegistersUsers;
2626

27+
protected $redirectConfirmationTo = 'redirectConfirmationUrl';
28+
29+
protected $redirectAfterRegistrationTo = 'redirectAfterRegistration';
30+
31+
protected $redirectAfterResendConfirmationTo = 'redirectAfterConfirmationResent';
32+
2733
/**
2834
* Get a validator for an incoming registration request.
2935
*

0 commit comments

Comments
 (0)