Implement forgot my password endpoints.

This commit is contained in:
Djonathan 2022-06-27 16:46:30 -03:00
parent cf8ac54790
commit 035f8ed5cf
6 changed files with 169 additions and 2 deletions

View File

@ -2,10 +2,57 @@
namespace App\Http\Controllers\Auth;
use App\Http\Requests\ForgotPasswordRequest;
use App\Mail\ResetPassword;
use App\Models\User;
use App\Traits\ApiResponse;
use Carbon\Carbon;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\DB;
class ForgotPasswordController extends Controller
{
//
use ApiResponse;
public function __invoke(ForgotPasswordRequest $request)
{
$verify = User::where('email', $request->all()['email'])->exists();
if ($verify) {
$verify2 = DB::table('password_resets')->where([
['email', $request->all()['email']]
]);
if ($verify2->exists()) {
$verify2->delete();
}
$token = random_int(100000, 999999);
$password_reset = DB::table('password_resets')->insert([
'email' => $request->all()['email'],
'token' => $token,
'created_at' => Carbon::now()
]);
if ($password_reset) {
$sendMail = Mail::to($request->all()['email'])->send(new ResetPassword($token));
return $this->successResponse(true, "Please check your email for a 6 digit pin", 200);
}
} else {
return $this->errorResponse(false, "This email does not exist", 400);
}
}
public function verifyPin(Request $request)
{
}
}

View File

@ -0,0 +1,56 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Http\Requests\ResetPasswordRequest;
use App\Models\User;
use App\Traits\ApiResponse;
use Carbon\Carbon;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
class ResetPasswordController extends Controller
{
use ApiResponse;
public function __invoke(ResetPasswordRequest $resetPasswordRequest)
{
$check = DB::table('password_resets')->where([
['email', $resetPasswordRequest->email],
['token', $resetPasswordRequest->token],
]);
if ($check->exists()) {
$difference = Carbon::now()->diffInSeconds($check->first()->created_at);
if ($difference > 3600) {
return $this->errorResponse(false, "Token Expired", 400);
}
$delete = DB::table('password_resets')->where([
['email', $resetPasswordRequest->email],
['token', $resetPasswordRequest->token],
])->delete();
$user = User::with('roles')->firstWhere('email', $resetPasswordRequest->email);
$role = $user->roles()->first();
$user->update([
'password' => Hash::make($resetPasswordRequest->password)
]);
$token = $user->first()->createToken('API Token', [$role->name]);
return $this->successResponse([
'token' => $token->plainTextToken,
'user' => $user
],
"You can now reset your password",
200);
} else {
return $this->errorResponse(false, "Invalid token", 401);
}
}
}

View File

@ -0,0 +1,30 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class ForgotPasswordRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
'email' => ['required', 'string', 'email', 'max:255'],
];
}
}

View File

@ -0,0 +1,32 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class ResetPasswordRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
'email' => ['required', 'string', 'email', 'max:255'],
'password' => ['required', 'string', 'min:6', 'confirmed'],
'token' => ['required'],
];
}
}

View File

@ -163,7 +163,7 @@ class PldRepository extends AbstractRepository implements PldContractInterface
$i++;
}
return $this->execute($fields, $params)
$test = $this->execute($fields, $params)
->groupBy('day_formatted', 'day_calc', 'submarket', 'year_month', 'year_month_formatted')
->get();

View File

@ -17,6 +17,8 @@ use Illuminate\Support\Facades\Route;
Route::prefix('auth')->group(function (){
Route::post('login', [\App\Http\Controllers\Auth\AuthController::class, 'login']);
Route::post('logout', [\App\Http\Controllers\Auth\AuthController::class, 'logout']);
Route::post('/forgot-password', \App\Http\Controllers\Auth\ForgotPasswordController::class);
Route::post('/reset-password', \App\Http\Controllers\Auth\ResetPasswordController::class);
});
Route::middleware(['auth:sanctum', 'verified'])->group(function () {