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\LogoutController;
|
||||||
use App\Http\Controllers\API\Auth\Mail\SendMailNotificationController;
|
use App\Http\Controllers\API\Auth\Mail\SendMailNotificationController;
|
||||||
use App\Http\Controllers\API\Auth\Mail\VerifyMailController;
|
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 App\Http\Controllers\API\Auth\RegisterController;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Route;
|
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::post('/email/verification-notification', [SendMailNotificationController::class, 'mailNotification'])->name('mail.notification');
|
||||||
Route::get('/email/verify/{id}/{hash}', [VerifyMailController::class, 'verifyMail'])->name('verification.verify');
|
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