two step verification module

This commit is contained in:
Ritikesh yadav
2024-04-03 15:33:08 +05:30
parent 671b17425e
commit 7ac14cff67
8 changed files with 270 additions and 48 deletions

View File

@@ -450,6 +450,34 @@ class AuthController extends Controller
}
}
public function enteredEmailOTP(Request $request)
{
// dd((int)$request->otp, Session::get('user-registration')['otp']);
$validator = Validator::make($request->post(), [
'otp' => 'required|min:4|max:4',
// 'contact_number' => 'required|exists:users,contact_number|min:10|max:10'
], [
'required' => 'The :attribute field is required',
// 'exists' => 'Contact Number has not been registered.',
'min' => 'The :attribute field must be 4 digits',
'max' => 'The :attribute field must be 4 digits',
]);
$validationMessage = $this->validationError($validator);
if ($validationMessage) {
return response()->json(['status' => 400, 'message' => $validationMessage], 400);
}
$otp = (int)$request->otp;
if (Session::has('user-registration')) {
// $user = Session::get('user-registration');
if (Session::get('user-registration')['otp'] == $otp) {
return response()->json(['status' => 200, 'message' => 'OTP verified']);
}
return response()->json(['status' => 401, 'message' => 'Invalid OTP!']);
}
return response()->json(['status' => 401, 'message' => 'OTP Expired!']);
}
public function signUp(Request $request)
{
$validator = Validator::make($request->all(), [
@@ -505,14 +533,15 @@ class AuthController extends Controller
]);
if (!$userCreated) {
return response()->json(['status' => 400, 'message' => 'Error creating user!'])->setStatusCode(400);
}else{
$user = User::where('email',$request->email)->first();
} else {
$user = User::where('email', $request->email)->first();
$userToken = $user->createToken('apiToken')->plainTextToken;
return response()->json(['status' => 200, 'message' => 'User Created','token' => $userToken,'data' => $user]);
return response()->json(['status' => 200, 'message' => 'User Created', 'token' => $userToken, 'data' => $user]);
}
} else {
Session::forget('user-registration');
$otp = $this->otpGenerate($request->email);
$mobile_otp = $this->otpGenerate($request->contact_number);
$userRegistration = [
'name' => $request->name,
'user_type' => 'Investor',
@@ -520,7 +549,8 @@ class AuthController extends Controller
'email' => $request->email,
'password' => bcrypt($request->password),
'contact_number' => $request->contact_number,
'otp' => $otp
'otp' => $otp,
'mobile_otp' => $mobile_otp,
];
$userCreated = Session::put('user-registration', $userRegistration);
$mailData = [
@@ -528,6 +558,7 @@ class AuthController extends Controller
'body' => 'This is for testing email using smtp.'
];
Mail::to($request->email)->send(new OtpMail($mailData, $otp));
$this->thirdPartyOTP($request->contact_number,$mobile_otp);
}
// $name = $request->name;
// $email = $request->email;
@@ -561,14 +592,15 @@ class AuthController extends Controller
]);
if (!$userCreated) {
return response()->json(['status' => 400, 'message' => 'Error creating user!'])->setStatusCode(400);
}else{
$user = User::where('email',$request->email2)->first();
} else {
$user = User::where('email', $request->email2)->first();
$userToken = $user->createToken('apiToken')->plainTextToken;
return response()->json(['status' => 200, 'message' => 'User Created','token' => $userToken,'data' => $user]);
return response()->json(['status' => 200, 'message' => 'User Created', 'token' => $userToken, 'data' => $user]);
}
} else {
Session::forget('user-registration');
$otp = $this->otpGenerate($request->email);
$mobile_otp = $this->otpGenerate($validated['contact_number2']);
$userRegistration = [
'name' => $validated['name2'],
'user_type' => 'Asset Manager',
@@ -576,7 +608,8 @@ class AuthController extends Controller
'email' => $validated['email2'],
'contact_number' => $validated['contact_number2'],
'password' => bcrypt($validated['password2']),
'otp' => $otp
'otp' => $otp,
'mobile_otp' => $mobile_otp,
];
$userCreated = Session::put('user-registration', $userRegistration);
$mailData = [
@@ -584,6 +617,7 @@ class AuthController extends Controller
'body' => 'This is for testing email using smtp.'
];
Mail::to($validated['email2'])->send(new OtpMail($mailData, $otp));
$this->thirdPartyOTP($validated['contact_number2'],$mobile_otp);
// Mail::to('yadavritikesh29@gmail.com')->send(new OtpMail($mailData, $otp));
}
// $name = $request->name;
@@ -601,7 +635,8 @@ class AuthController extends Controller
// return response()->json(['status' => 400, 'message' => 'Error creating user!'], 400);
// }
// $token = $userCreated->createToken('apiToken')->plainTextToken;
return response()->json(['status' => 200, 'message' => 'User Created']);
// return response()->json(['status' => 200, 'message' => 'User Created']);
return response()->json(['status' => 200, 'message' => 'OTP has been sent to your email']);
}
public function getUser(Request $request)
@@ -716,7 +751,7 @@ class AuthController extends Controller
$otp = (int)$request->otp;
if (Session::has('user-registration')) {
$userDetails = Session::get('user-registration');
if ($userDetails['otp'] !== $otp) {
if ($userDetails['mobile_otp'] !== $otp) {
return response()->json(['status' => 400, 'message' => 'OTP Did Not Matched!']);
}
$userCreated = User::create([
@@ -739,8 +774,9 @@ class AuthController extends Controller
$data->notify(new UserAdmin($notify, $type));
}
Auth::guard('users')->login($userCreated);
// Auth::guard('users')->login($userCreated);
return response()->json(['status' => 200, 'message' => 'OTP has been matched and User has been created!'], 200);
// return response()->json(['status' => 200, 'message' => 'OTP has been matched'], 200);
}
$checkOTP = User::where(['contact_number' => $request->contact_number, 'otp' => $request->otp])->first();
@@ -860,7 +896,7 @@ class AuthController extends Controller
]);
if ($insertOtp) {
return response()->json(['message' => 'OTP Sent Succesfully', 'otp' => $otp,'status' => 200]);
return response()->json(['message' => 'OTP Sent Succesfully', 'otp' => $otp, 'status' => 200]);
}
return response()->json(['message' => 'Error Sending OTP', 'status' => 400]);
}
@@ -887,7 +923,7 @@ class AuthController extends Controller
}
return response()->json(['status' => 200, 'message' => 'OTP has been matched!'], 200);
}
return response()->json(['message' => 'OTP Not Matched', 'status' => 400],400);
return response()->json(['message' => 'OTP Not Matched', 'status' => 400], 400);
}
public function forgotPasswordStepThree(Request $request)
@@ -910,11 +946,11 @@ class AuthController extends Controller
if ($validationMessage) {
return response()->json(['status' => 400, 'message' => $validationMessage], 400);
}
$user = User::where(['contact_number' => $request->contact_number])->first();
if (Hash::check($request->password, $user->password)){
return response()->json(['message' => 'New Password Cannot be Same as Old Password!', 'status' => 400],400);
if (Hash::check($request->password, $user->password)) {
return response()->json(['message' => 'New Password Cannot be Same as Old Password!', 'status' => 400], 400);
}
$changePassword = User::where(['contact_number' => $request->contact_number])->update([

View File

@@ -47,6 +47,11 @@ class LoginController extends Controller
return view('Frontend.Pages.register_otp');
}
public function registerMobileOtp()
{
return view('Frontend.Pages.register_mobile_otp');
}
public function forgetPassword(){
return view('Frontend.Pages.forget_password_request');
}

View File

@@ -180,7 +180,7 @@ class ProfileController extends Controller
Mail::to($request->newEmail)->send(new OtpMail($mailData, $otp));
return response()->json([
'status' => 200,
'message' => 'OTP sended on enter email',
'message' => 'OTP has been sent to your email',
]);
}
@@ -193,7 +193,7 @@ class ProfileController extends Controller
'email' => Session::get('newEmail'),
]);
Session::forget(['newEmail', 'otp']);
return response()->json(['status' => 200, 'message' => 'Email update successfully']);
return response()->json(['status' => 200, 'message' => 'Your email updated successfully']);
}
return response()->json(['status' => 201, 'message' => 'OTP invalid !']);
}
@@ -212,13 +212,47 @@ class ProfileController extends Controller
$otp = rand(1000, 9999);
Session::put('contact_number', $request->newcontact_number);
Session::put('mobile_otp', $otp);
$sendOTPMessage = (new sendOTP)->thirdPartyOTP($request->contact_number, $otp);
$this->thirdPartyOTP($request->contact_number, $otp);
return response()->json([
'status' => 200,
'message' => 'OTP sended to contact number',
'message' => 'OTP has been sent to your contact number',
]);
}
public function thirdPartyOTP($number, $otp)
{
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://restapi.smscountry.com/v0.1/Accounts/4F7T5SbGyV7HBrEHxmX4/SMSes/',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => '{
"Text": "Dear Investor, Your login OTP is ' . $otp . '. - Blue Feather Ventures Pvt Ltd.",
"Number": "91' . $number . '",
"SenderId": "BLUFVL",
"DRNotifyUrl": "https://www.domainname.com/notifyurl",
"DRNotifyHttpMethod": "POST",
"Tool": "API"
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic NEY3VDVTYkd5VjdIQnJFSHhtWDQ6emFXdFEyTlV3ZlZROHB6dGRvVlRZUFdibG01Y1AxRldsbWl2WlVrbg=='
),
));
$response = curl_exec($curl);
curl_close($curl);
return $response;
// return true;
}
public function updateContactNumber(Request $request)
{
// dd(Session::get('mobile_otp'), Session::get('contact_number'), $request->mobile_otp);
@@ -228,7 +262,7 @@ class ProfileController extends Controller
'contact_number' => Session::get('contact_number'),
]);
Session::forget(['contact_number', 'mobile_otp']);
return response()->json(['status' => 200, 'message' => 'Contact number update successfully']);
return response()->json(['status' => 200, 'message' => 'Contact number updated successfully']);
}
return response()->json(['status' => 201, 'message' => 'OTP invalid !']);
}

View File

@@ -106,19 +106,23 @@ $(document).ready(function () {
success: function (data) {
if (data.status == 200) {
// window.location.href = 'register_otp?user_id=' + data.user_id;
Swal.fire({
text: data.message,
icon: "success",
buttonsStyling: !1,
confirmButtonText: "Proceed",
customClass: { confirmButton: "btn yellow-btn popup-button" },
}).then(function (t) {
if (t.isConfirmed) {
let url = "register_otp";
let url = "register_otp";
window.location.replace(url);
}
});
window.location.replace(url);
// Swal.fire({
// text: data.message,
// icon: "success",
// buttonsStyling: !1,
// confirmButtonText: "Proceed",
// customClass: { confirmButton: "btn yellow-btn popup-button" },
// }).then(function (t) {
// if (t.isConfirmed) {
// // let url = "{{route('register_otp')}}";
// let url = "register_otp";
// window.location.replace(url);
// }
// });
} else if (data.error.email) {
$("#error").remove();
@@ -247,19 +251,19 @@ $(document).ready(function () {
success: function (data) {
if (data.status == 200) {
// window.location.href = 'register_otp?user_id=' + data.user_id;
Swal.fire({
text: data.message,
icon: "success",
buttonsStyling: !1,
confirmButtonText: "Proceed",
customClass: { confirmButton: "btn yellow-btn popup-button" },
}).then(function (t) {
if (t.isConfirmed) {
let url = "register_otp";
// Swal.fire({
// text: data.message,
// icon: "success",
// buttonsStyling: !1,
// confirmButtonText: "Proceed",
// customClass: { confirmButton: "btn yellow-btn popup-button" },
// }).then(function (t) {
// if (t.isConfirmed) {
// let url = "register_otp";
window.location.replace(url);
}
});
// window.location.replace(url);
// }
// });
} else if (data.error.email) {
$("#error").remove();

View File

@@ -47,7 +47,7 @@ $(document).ready(function () {
submitHandler: function (form) {
// var formData = new FormData(form);
// var user_id = $("#user_id").val();
// var user_id = $("#user_id").val();
var otp =
$("#input_1").val().toString() +
@@ -62,9 +62,91 @@ $(document).ready(function () {
});
$.ajax({
// url: "api/verify/otp",
url: "api/entered-otp",
url: "api/entered-email-otp",
type: "POST",
data: {
otp: otp,
},
// dataType: 'json',
success: function (response) {
if (response.status != 200) {
// Swal.fire({
// text: response.message,
// icon: "error",
// buttonsStyling: !1,
// confirmButtonText: "Ok, got it!",
// customClass: { confirmButton: "btn btn-primary popup-button" },
// }).then(function (t) {
// if (t.isConfirmed) {
// $(".otp").val("");
// }
// });
toastr.warning(response.message);
} else {
toastr.success(response.message);
setTimeout(function () {
url = "register-mobile-otp";
window.location.replace(url);
}, 3000);
// Swal.fire({
// text: "OTP Verified Successfully",
// icon: "success",
// buttonsStyling: !1,
// confirmButtonText: "Proceed",
// customClass: { confirmButton: "btn yellow-btn popup-button" },
// }).then(function (t) {
// if (t.isConfirmed) {
// let url = "/";
// window.location.replace(url);
// }
// });
}
},
});
},
});
$("#verify_otp_for_mobile").validate({
rules: {
user_id: {
required: true,
},
},
messages: {
user_id: {
required: "",
},
},
submitHandler: function (form) {
// alert("hello");
// var formData = new FormData(form);
// var user_id = $("#user_id").val();
var otp =
$("#input_1").val().toString() +
$("#input_2").val().toString() +
$("#input_3").val().toString() +
$("#input_4").val().toString();
$.ajaxSetup({
headers: {
"X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr("content"),
},
});
$.ajax({
url: "api/entered-otp",
type: "POST",
@@ -91,7 +173,9 @@ $(document).ready(function () {
$(".otp").val("");
}
});
// toastr.warning(response.message);
} else {
// toastr.success(response.message);
Swal.fire({
text: "OTP Verified Successfully",
icon: "success",

View File

@@ -0,0 +1,57 @@
<?php $currentPage = 'register_mobile_otp'; ?>
@extends('Frontend.layouts.master')
@section('content')
<div class="login">
<div class="container">
<div class="row d-flex align-items-center justify-content-center">
<div class="col-md-6 right" data-aos="fade-left">
<div class="login-form-otp text-center">
<h1>Create Your Account</h1>
<h2>Get your free account now</h2>
<h3>Mobile OTP Verification</h3>
<div class="form-group">
<label>Please enter the OTP sent to registered mobile number</label>
<div class="otp-field">
<form id="verify_otp_for_mobile" autocomplete="off">
<!--<input type="hidden" id="user_id" value="{{ Request::get('user_id') }}" name="user_id">-->
<input type="text" id="input_1" class="otp" name="input_1" maxlength="1" />
<input type="text" id="input_2" class="otp"name="input_2" maxlength="1" />
<input type="text" id="input_3" class="otp"name="input_3" maxlength="1" />
<input type="text" id="input_4" class="otp"name="input_4" maxlength="1" />
<!--<input type="hidden" id="otp">-->
<button type="submit" class="yellow-btn signin mt-2">Continue</button>
</form>
</div>
</div>
<p>OTP has been sent to your registered email address. <br>OTP valid for <span
id="countdowns-timer"></span> sec</p>
<p id="registration_resend_otp" class="regist">Didn't receive any otp? <a href="#"
id="resend_registration_otp" class="d-none">Resend OTP</a></p>
</div>
</div>
</div>
</div>
</div>
<!--thankyou modal-->
<div id="thank-modal" class="modal fade" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<a href="{{ route('index') }}">x</a>
</div>
<div class="modal-body">
<img src="https://wordpress.betadelivery.com/freeU/assets/image/10643.png" />
<p>We're excited to have you on board. Get started and explore the alternative investment world through
FreeU.</p>
</div>
</div>
</div>
</div>
@endsection

View File

@@ -154,6 +154,7 @@ Route::post('sign-up', [AuthController::class, 'signUp']);
Route::post('sign-up-2', [AuthController::class, 'signUp2']);
Route::post('send-otp', [AuthController::class, 'sendOtp']);
Route::post('entered-otp', [AuthController::class, 'enteredOTP']);
Route::post('entered-email-otp', [AuthController::class, 'enteredEmailOTP']);
Route::post("product-filter", [HomeController::class, 'productFilter']);
Route::group(['middleware' => ['auth:sanctum']], function () {
Route::post('check-pin', [HomeController::class, 'checkPin']);

View File

@@ -182,6 +182,7 @@ Route::controller(UserLogin::class)->group(function () {
Route::get("register", 'register')->name('register');
Route::get("register_otp", 'registerOtp')->name('register_otp');
Route::get("register-mobile-otp", 'registerMobileOtp')->name('register-mobile-otp');
Route::get("forget-password", 'forgetPassword')->name('forget-password');
Route::get("reset-password", 'resetPassword')->name('reset-password');
Route::get("sign-out", 'signOut')->name('sign-out');