diff --git a/resources/views/auth/forgot-password.blade.php b/resources/views/auth/forgot-password.blade.php index e69de29bb..baa374034 100644 --- a/resources/views/auth/forgot-password.blade.php +++ b/resources/views/auth/forgot-password.blade.php @@ -0,0 +1,32 @@ +@extends('root::auth.layout') + +{{-- Title --}} +@section('title', __('Forgot Password')) + +{{-- Content --}} +@section('content') +
+ @csrf +
+
+ + $errors->has('email')]) + id="email" + type="email" + name="email" + required + value="{{ Request::old('email') }}" + > + @error('email') + {{ $message }} + @enderror +
+
+ +
+
+
+@endsection diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php index 94c1c3abe..1a9c360c4 100644 --- a/resources/views/auth/login.blade.php +++ b/resources/views/auth/login.blade.php @@ -5,7 +5,7 @@ {{-- Content --}} @section('content') -

Hey there, welcome back!

+

{{ __('Hey there, welcome back!') }}

@csrf
@@ -25,7 +25,8 @@
$errors->has('password')]) diff --git a/routes/auth.php b/routes/auth.php index 2a20318c9..ac3284d60 100644 --- a/routes/auth.php +++ b/routes/auth.php @@ -1,8 +1,17 @@ name('login'); Route::post('login', [LoginController::class, 'login']); Route::post('logout', [LoginController::class, 'logout'])->name('logout'); + +// Reset +Route::get('/password/reset', [ForgotPasswordController::class, 'show'])->name('password.request'); +Route::post('/password/email', [ForgotPasswordController::class, 'send'])->name('password.email'); +Route::get('/password/reset/{token}/{email}', [ResetPasswordController::class, 'show'])->name('password.reset'); +Route::post('/password/reset', [ResetPasswordController::class, 'reset'])->name('password.update'); diff --git a/src/Fields/Relation.php b/src/Fields/Relation.php index 33508b0a7..40f3c5057 100644 --- a/src/Fields/Relation.php +++ b/src/Fields/Relation.php @@ -634,7 +634,7 @@ public function toInput(Request $request, Model $model): array } /** - * Get the sub resource representation of the + * Get the sub resource representation of the relation */ public function toSubResource(Request $request, Model $model): array { @@ -645,7 +645,17 @@ public function toSubResource(Request $request, Model $model): array } /** - * Get the index representation of the + * Get the fragment representation of the relation. + */ + public function toFragment(Request $request, Model $model): array + { + return array_merge($this->toSubResource($request, $model), [ + // + ]); + } + + /** + * Get the index representation of the relation. */ public function toIndex(Request $request, Model $model): array { diff --git a/src/Http/Controllers/Auth/ForgotPasswordController.php b/src/Http/Controllers/Auth/ForgotPasswordController.php new file mode 100644 index 000000000..5bfcceb32 --- /dev/null +++ b/src/Http/Controllers/Auth/ForgotPasswordController.php @@ -0,0 +1,34 @@ +validate(['email' => ['required', 'string', 'email']]); + + Password::broker()->sendResetLink($data); + + return Redirect::back()->with('status', __(Password::RESET_LINK_SENT)); + } +} diff --git a/src/Http/Controllers/Auth/ResetPasswordController.php b/src/Http/Controllers/Auth/ResetPasswordController.php new file mode 100644 index 000000000..67c3e2937 --- /dev/null +++ b/src/Http/Controllers/Auth/ResetPasswordController.php @@ -0,0 +1,69 @@ + $request->route()->parameter('email'), + 'token' => $request->route()->parameter('token'), + ]); + } + + /** + * Reset the given user's password. + */ + public function reset(ResetPasswordRequest $request): RedirectResponse + { + $response = Password::broker()->reset( + $request->only(['email', 'password', 'password_confirmation', 'token']), + function (User $user, string $password): void { + $this->resetPassword($user, $password); + + if (! $user->hasVerifiedEmail()) { + $user->markEmailAsVerified(); + } + } + ); + + return $response == Password::PASSWORD_RESET + ? Redirect::route('root.dashboard')->with('message', __($response)) + : Redirect::back()->withInput($request->only(['email']))->withErrors(['email' => __($response)]); + } + + /** + * Reset the given user's password. + */ + protected function resetPassword(User $user, string $password): void + { + $user->setAttribute('password', Hash::make($password)); + + $user->setRememberToken(Str::random(60)); + + $user->save(); + + Event::dispatch(new PasswordReset($user)); + + Auth::guard()->login($user); + } +}