Implement forgot password with JWT
This commit is contained in:
parent
b0972ab066
commit
9eb4503084
@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\API\Auth\Password;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Password;
|
||||
use App\Http\Requests\NotificationPasswordRequest;
|
||||
|
||||
class NotificationPasswordController extends Controller
|
||||
{
|
||||
public function passwordNotification(NotificationPasswordRequest $request)
|
||||
{
|
||||
try {
|
||||
$status = Password::sendResetLink(
|
||||
$request->only('email')
|
||||
);
|
||||
if ($status === Password::ResetLinkSent) {
|
||||
return response()->json([
|
||||
'status' => 1,
|
||||
'message' => "We’ve emailed you the password reset link. Please check your inbox!",
|
||||
], 200);
|
||||
} else {
|
||||
return response()->json([
|
||||
'status' => 0,
|
||||
'message' => "We can’t find a user with that email address.",
|
||||
], 200);
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
return response()->json([
|
||||
'status' => 0,
|
||||
'error' => 'We couldn’t send the password reset email due to an error. Please try again later.',
|
||||
'message' => $e->getMessage(),
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,48 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\API\Auth\Password;
|
||||
|
||||
use App\Models\User;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Password;
|
||||
use Illuminate\Auth\Events\PasswordReset;
|
||||
use App\Http\Requests\ResetPasswordRequest;
|
||||
|
||||
class ResetPasswordController extends Controller
|
||||
{
|
||||
public function resetPassword(ResetPasswordRequest $request)
|
||||
{
|
||||
try {
|
||||
$status = Password::reset(
|
||||
$request->only('email', 'password', 'password_confirmation', 'token'),
|
||||
function (User $user, string $password) {
|
||||
$user->forceFill([
|
||||
'password' => Hash::make($password)
|
||||
])->setRememberToken(Str::random(60));
|
||||
$user->save();
|
||||
event(new PasswordReset($user));
|
||||
}
|
||||
);
|
||||
if ($status === Password::PasswordReset) {
|
||||
return response()->json([
|
||||
'status' => 1,
|
||||
'message' => 'Your password has been reset!'
|
||||
]);
|
||||
} else {
|
||||
return response()->json([
|
||||
'status' => 1,
|
||||
'message' => 'This password reset token is invalid.'
|
||||
]);
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
return response()->json([
|
||||
'status' => 0,
|
||||
'error' => 'We couldn’t process the request due to an error. Please try again later.',
|
||||
'message' => $e->getMessage(),
|
||||
], 500);
|
||||
}
|
||||
}
|
||||
}
|
||||
28
API/JWT/app/Http/Requests/NotificationPasswordRequest.php
Normal file
28
API/JWT/app/Http/Requests/NotificationPasswordRequest.php
Normal file
@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class NotificationPasswordRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
"email" => "required|email|exists:users,email",
|
||||
];
|
||||
}
|
||||
}
|
||||
30
API/JWT/app/Http/Requests/ResetPasswordRequest.php
Normal file
30
API/JWT/app/Http/Requests/ResetPasswordRequest.php
Normal file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests;
|
||||
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class ResetPasswordRequest extends FormRequest
|
||||
{
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*/
|
||||
public function authorize(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the validation rules that apply to the request.
|
||||
*
|
||||
* @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'token' => 'required',
|
||||
'email' => 'required|email|exists:users,email',
|
||||
'password' => 'required|min:8|confirmed',
|
||||
];
|
||||
}
|
||||
}
|
||||
@ -5,6 +5,8 @@ use App\Http\Controllers\API\Auth\LoginController;
|
||||
use App\Http\Controllers\API\Auth\LogoutController;
|
||||
use App\Http\Controllers\API\Auth\Mail\SendMailNotificationController;
|
||||
use App\Http\Controllers\API\Auth\Mail\VerifyMailController;
|
||||
use App\Http\Controllers\API\Auth\Password\NotificationPasswordController;
|
||||
use App\Http\Controllers\API\Auth\Password\ResetPasswordController;
|
||||
use App\Http\Controllers\API\Auth\RegisterController;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
@ -24,3 +26,9 @@ Route::group(['middleware' => 'auth:api'], function () {
|
||||
Route::post('/email/verification-notification', [SendMailNotificationController::class, 'mailNotification'])->name('mail.notification');
|
||||
Route::get('/email/verify/{id}/{hash}', [VerifyMailController::class, 'verifyMail'])->name('verification.verify');
|
||||
});
|
||||
|
||||
//reset password
|
||||
Route::group(['middleware' => 'guest'], function () {
|
||||
Route::post('forgot-password', [NotificationPasswordController::class, 'passwordNotification'])->name('password.notification');
|
||||
Route::post('reset-password', [ResetPasswordController::class, 'resetPassword'])->name('password.reset');
|
||||
});
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user