Skip to content

Commit 511b380

Browse files
committed
porting over more auth functionality and controllers
1 parent b3d9edf commit 511b380

File tree

100 files changed

+1793
-427
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

100 files changed

+1793
-427
lines changed

app/Http/Controllers/Auth/AuthenticatedSessionController.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
use App\Http\Controllers\Controller;
66
use App\Http\Requests\Auth\LoginRequest;
7-
use Illuminate\Foundation\Inspiring;
87
use Illuminate\Http\RedirectResponse;
98
use Illuminate\Http\Request;
109
use Illuminate\Support\Facades\Auth;
@@ -19,13 +18,9 @@ class AuthenticatedSessionController extends Controller
1918
*/
2019
public function create(): Response
2120
{
22-
[$message, $author] = str(Inspiring::quotes()->random())->explode('-');
23-
2421
return Inertia::render('Auth/Login', [
2522
'canResetPassword' => Route::has('password.request'),
2623
'status' => session('status'),
27-
'name' => config('app.name'),
28-
'quote' => ['message' => trim($message), 'author' => trim($author)],
2924
]);
3025
}
3126

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Auth;
4+
5+
use App\Http\Controllers\Controller;
6+
use Illuminate\Http\RedirectResponse;
7+
use Illuminate\Http\Request;
8+
use Illuminate\Support\Facades\Auth;
9+
use Illuminate\Validation\ValidationException;
10+
use Inertia\Inertia;
11+
use Inertia\Response;
12+
13+
class ConfirmablePasswordController extends Controller
14+
{
15+
/**
16+
* Show the confirm password view.
17+
*/
18+
public function show(): Response
19+
{
20+
return Inertia::render('Auth/ConfirmPassword');
21+
}
22+
23+
/**
24+
* Confirm the user's password.
25+
*/
26+
public function store(Request $request): RedirectResponse
27+
{
28+
if (! Auth::guard('web')->validate([
29+
'email' => $request->user()->email,
30+
'password' => $request->password,
31+
])) {
32+
throw ValidationException::withMessages([
33+
'password' => __('auth.password'),
34+
]);
35+
}
36+
37+
$request->session()->put('auth.password_confirmed_at', time());
38+
39+
return redirect()->intended(route('dashboard', absolute: false));
40+
}
41+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Auth;
4+
5+
use App\Http\Controllers\Controller;
6+
use Illuminate\Http\RedirectResponse;
7+
use Illuminate\Http\Request;
8+
9+
class EmailVerificationNotificationController extends Controller
10+
{
11+
/**
12+
* Send a new email verification notification.
13+
*/
14+
public function store(Request $request): RedirectResponse
15+
{
16+
if ($request->user()->hasVerifiedEmail()) {
17+
return redirect()->intended(route('dashboard', absolute: false));
18+
}
19+
20+
$request->user()->sendEmailVerificationNotification();
21+
22+
return back()->with('status', 'verification-link-sent');
23+
}
24+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Auth;
4+
5+
use App\Http\Controllers\Controller;
6+
use Illuminate\Http\RedirectResponse;
7+
use Illuminate\Http\Request;
8+
use Inertia\Inertia;
9+
use Inertia\Response;
10+
11+
class EmailVerificationPromptController extends Controller
12+
{
13+
/**
14+
* Display the email verification prompt.
15+
*/
16+
public function __invoke(Request $request): RedirectResponse|Response
17+
{
18+
return $request->user()->hasVerifiedEmail()
19+
? redirect()->intended(route('dashboard', absolute: false))
20+
: Inertia::render('Auth/VerifyEmail', ['status' => session('status')]);
21+
}
22+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Auth;
4+
5+
use App\Http\Controllers\Controller;
6+
use Illuminate\Auth\Events\PasswordReset;
7+
use Illuminate\Http\RedirectResponse;
8+
use Illuminate\Http\Request;
9+
use Illuminate\Support\Facades\Hash;
10+
use Illuminate\Support\Facades\Password;
11+
use Illuminate\Support\Str;
12+
use Illuminate\Validation\Rules;
13+
use Illuminate\Validation\ValidationException;
14+
use Inertia\Inertia;
15+
use Inertia\Response;
16+
17+
class NewPasswordController extends Controller
18+
{
19+
/**
20+
* Display the password reset view.
21+
*/
22+
public function create(Request $request): Response
23+
{
24+
return Inertia::render('Auth/ResetPassword', [
25+
'email' => $request->email,
26+
'token' => $request->route('token'),
27+
]);
28+
}
29+
30+
/**
31+
* Handle an incoming new password request.
32+
*
33+
* @throws \Illuminate\Validation\ValidationException
34+
*/
35+
public function store(Request $request): RedirectResponse
36+
{
37+
$request->validate([
38+
'token' => 'required',
39+
'email' => 'required|email',
40+
'password' => ['required', 'confirmed', Rules\Password::defaults()],
41+
]);
42+
43+
// Here we will attempt to reset the user's password. If it is successful we
44+
// will update the password on an actual user model and persist it to the
45+
// database. Otherwise we will parse the error and return the response.
46+
$status = Password::reset(
47+
$request->only('email', 'password', 'password_confirmation', 'token'),
48+
function ($user) use ($request) {
49+
$user->forceFill([
50+
'password' => Hash::make($request->password),
51+
'remember_token' => Str::random(60),
52+
])->save();
53+
54+
event(new PasswordReset($user));
55+
}
56+
);
57+
58+
// If the password was successfully reset, we will redirect the user back to
59+
// the application's home authenticated view. If there is an error we can
60+
// redirect them back to where they came from with their error message.
61+
if ($status == Password::PASSWORD_RESET) {
62+
return redirect()->route('login')->with('status', __($status));
63+
}
64+
65+
throw ValidationException::withMessages([
66+
'email' => [trans($status)],
67+
]);
68+
}
69+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Auth;
4+
5+
use App\Http\Controllers\Controller;
6+
use Illuminate\Http\RedirectResponse;
7+
use Illuminate\Http\Request;
8+
use Illuminate\Support\Facades\Password;
9+
use Illuminate\Validation\ValidationException;
10+
use Inertia\Inertia;
11+
use Inertia\Response;
12+
13+
class PasswordResetLinkController extends Controller
14+
{
15+
/**
16+
* Display the password reset link request view.
17+
*/
18+
public function create(): Response
19+
{
20+
return Inertia::render('Auth/ForgotPassword', [
21+
'status' => session('status'),
22+
]);
23+
}
24+
25+
/**
26+
* Handle an incoming password reset link request.
27+
*
28+
* @throws \Illuminate\Validation\ValidationException
29+
*/
30+
public function store(Request $request): RedirectResponse
31+
{
32+
$request->validate([
33+
'email' => 'required|email',
34+
]);
35+
36+
// We will send the password reset link to this user. Once we have attempted
37+
// to send the link, we will examine the response then see the message we
38+
// need to show to the user. Finally, we'll send out a proper response.
39+
$status = Password::sendResetLink(
40+
$request->only('email')
41+
);
42+
43+
if ($status == Password::RESET_LINK_SENT) {
44+
return back()->with('status', __($status));
45+
}
46+
47+
throw ValidationException::withMessages([
48+
'email' => [trans($status)],
49+
]);
50+
}
51+
}

app/Http/Controllers/Auth/RegisteredUserController.php

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
use App\Http\Controllers\Controller;
66
use App\Models\User;
77
use Illuminate\Auth\Events\Registered;
8-
use Illuminate\Foundation\Inspiring;
98
use Illuminate\Http\RedirectResponse;
109
use Illuminate\Http\Request;
1110
use Illuminate\Support\Facades\Auth;
@@ -21,12 +20,7 @@ class RegisteredUserController extends Controller
2120
*/
2221
public function create(): Response
2322
{
24-
[$message, $author] = str(Inspiring::quotes()->random())->explode('-');
25-
26-
return Inertia::render('Auth/Register', [
27-
'name' => config('app.name'),
28-
'quote' => ['message' => trim($message), 'author' => trim($author)],
29-
]);
23+
return Inertia::render('Auth/Register');
3024
}
3125

3226
/**
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Auth;
4+
5+
use App\Http\Controllers\Controller;
6+
use Illuminate\Auth\Events\Verified;
7+
use Illuminate\Foundation\Auth\EmailVerificationRequest;
8+
use Illuminate\Http\RedirectResponse;
9+
10+
class VerifyEmailController extends Controller
11+
{
12+
/**
13+
* Mark the authenticated user's email address as verified.
14+
*/
15+
public function __invoke(EmailVerificationRequest $request): RedirectResponse
16+
{
17+
if ($request->user()->hasVerifiedEmail()) {
18+
return redirect()->intended(route('dashboard', absolute: false).'?verified=1');
19+
}
20+
21+
if ($request->user()->markEmailAsVerified()) {
22+
event(new Verified($request->user()));
23+
}
24+
25+
return redirect()->intended(route('dashboard', absolute: false).'?verified=1');
26+
}
27+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Settings;
4+
5+
use App\Http\Controllers\Controller;
6+
use Illuminate\Contracts\Auth\MustVerifyEmail;
7+
use Illuminate\Http\RedirectResponse;
8+
use Illuminate\Http\Request;
9+
use Illuminate\Support\Facades\Auth;
10+
use Illuminate\Support\Facades\Redirect;
11+
use Illuminate\Validation\Rules\Password;
12+
use Inertia\Inertia;
13+
use Inertia\Response;
14+
15+
class DeleteController extends Controller
16+
{
17+
/**
18+
* Display the user's password form.
19+
*/
20+
public function edit(Request $request): Response
21+
{
22+
return Inertia::render('Settings/Delete', [
23+
'mustVerifyEmail' => $request->user() instanceof MustVerifyEmail,
24+
'status' => session('status'),
25+
]);
26+
}
27+
28+
/**
29+
* Delete the user's account.
30+
*/
31+
public function destroy(Request $request): RedirectResponse
32+
{
33+
$request->validate([
34+
'password' => ['required', 'current_password'],
35+
]);
36+
37+
$user = $request->user();
38+
39+
Auth::logout();
40+
41+
$user->delete();
42+
43+
$request->session()->invalidate();
44+
$request->session()->regenerateToken();
45+
46+
return Redirect::to('/');
47+
}
48+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Settings;
4+
5+
use App\Http\Controllers\Controller;
6+
use Illuminate\Contracts\Auth\MustVerifyEmail;
7+
use Illuminate\Http\RedirectResponse;
8+
use Illuminate\Http\Request;
9+
use Illuminate\Support\Facades\Hash;
10+
use Illuminate\Validation\Rules\Password;
11+
use Inertia\Inertia;
12+
use Inertia\Response;
13+
14+
class PasswordController extends Controller
15+
{
16+
/**
17+
* Display the user's password form.
18+
*/
19+
public function edit(Request $request): Response
20+
{
21+
return Inertia::render('Settings/Password', [
22+
'mustVerifyEmail' => $request->user() instanceof MustVerifyEmail,
23+
'status' => session('status'),
24+
]);
25+
}
26+
27+
/**
28+
* Update the user's password.
29+
*/
30+
public function update(Request $request): RedirectResponse
31+
{
32+
$validated = $request->validate([
33+
'current_password' => ['required', 'current_password'],
34+
'password' => ['required', Password::defaults(), 'confirmed'],
35+
]);
36+
37+
$request->user()->update([
38+
'password' => Hash::make($validated['password']),
39+
]);
40+
41+
return back();
42+
}
43+
}

0 commit comments

Comments
 (0)