Skip to content

Commit fd5ff6e

Browse files
committed
基于Inertia+Vue3重构GeekChat功能
1 parent dc385eb commit fd5ff6e

Some content is hidden

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

58 files changed

+6492
-272
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Auth;
4+
5+
use App\Http\Controllers\Controller;
6+
use App\Http\Requests\Auth\LoginRequest;
7+
use App\Providers\RouteServiceProvider;
8+
use Illuminate\Http\RedirectResponse;
9+
use Illuminate\Http\Request;
10+
use Illuminate\Support\Facades\Auth;
11+
use Illuminate\Support\Facades\Route;
12+
use Inertia\Inertia;
13+
use Inertia\Response;
14+
15+
class AuthenticatedSessionController extends Controller
16+
{
17+
/**
18+
* Display the login view.
19+
*/
20+
public function create(): Response
21+
{
22+
return Inertia::render('Auth/Login', [
23+
'canResetPassword' => Route::has('password.request'),
24+
'status' => session('status'),
25+
]);
26+
}
27+
28+
/**
29+
* Handle an incoming authentication request.
30+
*/
31+
public function store(LoginRequest $request): RedirectResponse
32+
{
33+
$request->authenticate();
34+
35+
$request->session()->regenerate();
36+
37+
return redirect()->intended(RouteServiceProvider::HOME);
38+
}
39+
40+
/**
41+
* Destroy an authenticated session.
42+
*/
43+
public function destroy(Request $request): RedirectResponse
44+
{
45+
Auth::guard('web')->logout();
46+
47+
$request->session()->invalidate();
48+
49+
$request->session()->regenerateToken();
50+
51+
return redirect('/');
52+
}
53+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Auth;
4+
5+
use App\Http\Controllers\Controller;
6+
use App\Providers\RouteServiceProvider;
7+
use Illuminate\Http\RedirectResponse;
8+
use Illuminate\Http\Request;
9+
use Illuminate\Support\Facades\Auth;
10+
use Illuminate\Validation\ValidationException;
11+
use Inertia\Inertia;
12+
use Inertia\Response;
13+
14+
class ConfirmablePasswordController extends Controller
15+
{
16+
/**
17+
* Show the confirm password view.
18+
*/
19+
public function show(): Response
20+
{
21+
return Inertia::render('Auth/ConfirmPassword');
22+
}
23+
24+
/**
25+
* Confirm the user's password.
26+
*/
27+
public function store(Request $request): RedirectResponse
28+
{
29+
if (! Auth::guard('web')->validate([
30+
'email' => $request->user()->email,
31+
'password' => $request->password,
32+
])) {
33+
throw ValidationException::withMessages([
34+
'password' => __('auth.password'),
35+
]);
36+
}
37+
38+
$request->session()->put('auth.password_confirmed_at', time());
39+
40+
return redirect()->intended(RouteServiceProvider::HOME);
41+
}
42+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Auth;
4+
5+
use App\Http\Controllers\Controller;
6+
use App\Providers\RouteServiceProvider;
7+
use Illuminate\Http\RedirectResponse;
8+
use Illuminate\Http\Request;
9+
10+
class EmailVerificationNotificationController extends Controller
11+
{
12+
/**
13+
* Send a new email verification notification.
14+
*/
15+
public function store(Request $request): RedirectResponse
16+
{
17+
if ($request->user()->hasVerifiedEmail()) {
18+
return redirect()->intended(RouteServiceProvider::HOME);
19+
}
20+
21+
$request->user()->sendEmailVerificationNotification();
22+
23+
return back()->with('status', 'verification-link-sent');
24+
}
25+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Auth;
4+
5+
use App\Http\Controllers\Controller;
6+
use App\Providers\RouteServiceProvider;
7+
use Illuminate\Http\RedirectResponse;
8+
use Illuminate\Http\Request;
9+
use Inertia\Inertia;
10+
use Inertia\Response;
11+
12+
class EmailVerificationPromptController extends Controller
13+
{
14+
/**
15+
* Display the email verification prompt.
16+
*/
17+
public function __invoke(Request $request): RedirectResponse|Response
18+
{
19+
return $request->user()->hasVerifiedEmail()
20+
? redirect()->intended(RouteServiceProvider::HOME)
21+
: Inertia::render('Auth/VerifyEmail', ['status' => session('status')]);
22+
}
23+
}
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: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
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\Hash;
9+
use Illuminate\Validation\Rules\Password;
10+
11+
class PasswordController extends Controller
12+
{
13+
/**
14+
* Update the user's password.
15+
*/
16+
public function update(Request $request): RedirectResponse
17+
{
18+
$validated = $request->validate([
19+
'current_password' => ['required', 'current_password'],
20+
'password' => ['required', Password::defaults(), 'confirmed'],
21+
]);
22+
23+
$request->user()->update([
24+
'password' => Hash::make($validated['password']),
25+
]);
26+
27+
return back();
28+
}
29+
}
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+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Auth;
4+
5+
use App\Http\Controllers\Controller;
6+
use App\Models\User;
7+
use App\Providers\RouteServiceProvider;
8+
use Illuminate\Auth\Events\Registered;
9+
use Illuminate\Http\RedirectResponse;
10+
use Illuminate\Http\Request;
11+
use Illuminate\Support\Facades\Auth;
12+
use Illuminate\Support\Facades\Hash;
13+
use Illuminate\Validation\Rules;
14+
use Inertia\Inertia;
15+
use Inertia\Response;
16+
17+
class RegisteredUserController extends Controller
18+
{
19+
/**
20+
* Display the registration view.
21+
*/
22+
public function create(): Response
23+
{
24+
return Inertia::render('Auth/Register');
25+
}
26+
27+
/**
28+
* Handle an incoming registration request.
29+
*
30+
* @throws \Illuminate\Validation\ValidationException
31+
*/
32+
public function store(Request $request): RedirectResponse
33+
{
34+
$request->validate([
35+
'name' => 'required|string|max:255',
36+
'email' => 'required|string|email|max:255|unique:'.User::class,
37+
'password' => ['required', 'confirmed', Rules\Password::defaults()],
38+
]);
39+
40+
$user = User::create([
41+
'name' => $request->name,
42+
'email' => $request->email,
43+
'password' => Hash::make($request->password),
44+
]);
45+
46+
event(new Registered($user));
47+
48+
Auth::login($user);
49+
50+
return redirect(RouteServiceProvider::HOME);
51+
}
52+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Auth;
4+
5+
use App\Http\Controllers\Controller;
6+
use App\Providers\RouteServiceProvider;
7+
use Illuminate\Auth\Events\Verified;
8+
use Illuminate\Foundation\Auth\EmailVerificationRequest;
9+
use Illuminate\Http\RedirectResponse;
10+
11+
class VerifyEmailController extends Controller
12+
{
13+
/**
14+
* Mark the authenticated user's email address as verified.
15+
*/
16+
public function __invoke(EmailVerificationRequest $request): RedirectResponse
17+
{
18+
if ($request->user()->hasVerifiedEmail()) {
19+
return redirect()->intended(RouteServiceProvider::HOME.'?verified=1');
20+
}
21+
22+
if ($request->user()->markEmailAsVerified()) {
23+
event(new Verified($request->user()));
24+
}
25+
26+
return redirect()->intended(RouteServiceProvider::HOME.'?verified=1');
27+
}
28+
}

0 commit comments

Comments
 (0)