two step verification module
This commit is contained in:
@@ -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([
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
|
||||
@@ -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 !']);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
57
resources/views/Frontend/Pages/register_mobile_otp.blade.php
Normal file
57
resources/views/Frontend/Pages/register_mobile_otp.blade.php
Normal 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
|
||||
@@ -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']);
|
||||
|
||||
@@ -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');
|
||||
|
||||
Reference in New Issue
Block a user