Throw error message if user is not active using Laravel - laravel

I have field status in my users table and O want to check if status is 0 then user should not login and if 1 user should be able to login.
Here is my login code (controller is lengthy, please avoid some irrelevant code):
public function fdLogin(Request $request)
{
$credentials = $request->only('email', 'password');
$rules = [
'email' => 'required|email',
'password' => 'required',
];
$validator = Validator::make($credentials, $rules);
if ($validator->fails()) {
return response()->json([
'status' => false,
'message' => __('messages.validation_errors'),
'errors' => $validator->messages()
]);
}
$token = "";
try {
// if Request has latitude and longitude
$latFrom = $longFrom = $givenSpeciality = "";
$locationTag = false;
if ($request->has('lat') && $request->has('long') && $request->has('specialityKey') && !empty($request->lat) && !empty($request->long) && !empty($request->specialityKey)) {
$latFrom = $request->lat;
$longFrom = $request->long;
$givenSpeciality = $request->specialityKey;
$locationTag = true;
}
if (!Auth::attempt($credentials)) {
return response()->json(array('status' => false, 'message' => 'Invalid username or password', 'errors' => array('Invalid username or password')));
}
$speciality = DB::table('specialities')
->join('user_facility', 'specialities.id', 'user_facility.speciality_id')
->where('user_facility.user_id', Auth::user()->id)
->select('specialities.name', 'specialities.id')->first();
$types = [];
if (!empty($speciality)) {
$types = $speciality;
}
$customClaims = ['exp' => Carbon::now()->addYear()->timestamp, 'specialityType' => $types];
if (!$token = JWTAuth::claims($customClaims)->attempt($credentials)) {
return response()->json([
'status' => false,
'message' => 'We can`t find an account with this credentials.'
], 401);
}
} catch (JWTException $e) {
// Something went wrong with JWT Auth.
return response()->json([
'status' => false,
'message' => 'Failed to login, please try again.'
], 500);
}
$withInFacility['logged_in_facility'] = array();
$currentUser = Auth::user();
$user_id = $currentUser->id;
if ($locationTag) {
$userWithFacilities = $currentUser->load('facilities.facilityLocation', 'facilities.speciality.avaliableSpeciality');
$locations = array();
if (isset($userWithFacilities['facilities']) && count($userWithFacilities['facilities'])) {
foreach ($userWithFacilities['facilities'] as $facility) {
$faci = $facility->toArray();
if (!empty($faci['facility_location']) && $faci['facility_location'] > 0) {
$demo = $faci['facility_location'];
}
if (isset($faci['speciality']) && count($faci['speciality']) > 0) {
$speciality = $faci['speciality'];
if (isset($speciality['avaliable_speciality']) && count($speciality['avaliable_speciality']) > 0) {
$avaliable_speciality = $speciality['avaliable_speciality'];
$demo['avaliable'] = $avaliable_speciality['specialty_key'];
}
}
$locations[] = $demo;
}
if (count($locations)) {
foreach ($locations as $location) {
$distance = self::distance($latFrom, $longFrom, $location['lat'], $location['long']);
// if distance is less than 100 meter ''ll eligible to login else Log him out
if ($distance < config('constants.facility_radius')) {
if ($location['avaliable'] == $givenSpeciality) {
$withInFacility['logged_in_facility'] = $location;
$withInFacility['logged_in_facility']['radius'] = config('constants.facility_radius');
}
}
}
// if distance is less than 100 meter ''ll eligible to login else Log him out
if (empty($withInFacility['logged_in_facility'])) {
JWTAuth::setToken($token)->invalidate();
return response()->json(['status' => false, 'message' => 'Your are not in facility OR Your speciality did not matched with facility', 'errors' => '']);
}
} else {
return response(['status' => false, 'message' => 'Your Facility did not have any location , please ask for administrator', 'data' => null]);
}
} else {
return response(['status' => false, 'message' => 'You did not have any facility , please ask for administrator', 'data' => null]);
}
}
$currentUser->basicInfo = $this->userBasicInfo->where('user_id', $user_id)->first();
$is_super_admin = DB::table('users')->select('users.is_super_admin')->where('id', $user_id)->first();
$specialitiesAndRoles = DB::table('user_facility')
->leftjoin('roles', 'user_facility.role_id', 'roles.id')
->leftjoin('specialities', 'user_facility.speciality_id', '=', 'specialities.id')
->leftjoin('available_specialties', 'specialities.available_specialties_id', '=', 'available_specialties.id')
->where('user_facility.user_id', $user_id)
->select('user_facility.facility_id', 'user_facility.speciality_id', 'user_facility.is_facility_supervisor', 'user_facility.priv_key', 'user_facility.role_id', 'specialities.name', 'available_specialties.id', 'available_specialties.specialty_key')
->get();
$superadmin = $is_super_admin->is_super_admin;
$specialities = (object)$specialitiesAndRoles;
$sp = $specialitiesAndRoles->toArray();
$specialty_key = "";
if (!empty($sp)) {
$specialty_key = $sp[0]->specialty_key;
}
$fac_privs = array();
if (!empty($sp)) {
foreach ($sp as $s) {
$s = (array)$s;
$s['priv_list'] = Helpers::get_checked_privs($s);
$fac_privs[] = $s;
}
}
if (count($withInFacility['logged_in_facility'])) {
$withInFacilityObj = (object)$withInFacility['logged_in_facility'];
} else {
$withInFacilityObj = NULL;
}
$response = ['is_super_admin' => $superadmin, 'facilities' => $fac_privs, 'logged_in_facility' => $withInFacilityObj];
if ($superadmin == 1) {
$response['priv_ist'] = Helpers::get_priv_list();
}
$speciality = $this->speciality;
if ($speciality) {
$user = DB::table('verify_users')->where('user_id', $user_id)->first();
DB::table('verify_users')->insert([
'token' => $token,
'user_id' => $user_id,
]);
if ($specialty_key == 'medical_doctor') {
$md_db = DB::connection('doctorDB');
$user = $md_db->table('auth_token')->where('user_id', $user_id)->first();
if ($user) {
$md_db->table('auth_token')->where('id', $user->id)->update([
'token' => $token,
'isValid' => 1,
]);
} else {
$md_db->table('auth_token')->insert([
'token' => $token,
'isValid' => 1,
'user_id' => $user_id
]);
}
}
}
$user_data = $this->GetUserInfo();
unset($currentUser['facilities']);
return response()->json([
'status' => true,
'message' => 'Login successfully',
'data' => [
'token' => $token,
'userData' => $currentUser,
'userInfo' => $user_data,
'privileges' => $response,
]
]);
}
This is my whole controller of login I am not using Laravel built-in authentication, I have created my own login based on my project requirement, and I want to implement this functionality.

I don't know why you are not checking when you get the user info. I am not sure what is your purpose but may be this code will help you.
$currentUser = Auth::user();
if($currentUser->status == 0){
Auth::logout();
return response()->json([
'status' => false,
'message' => 'Failed to login, Access forbidden.',
], 403);
}

Related

How to create a admin login session in Codeigniter 4

if($data)
{
$pass = $data['password'];
$authenticatePassword = password_verify($password, $pass);
if($authenticatePassword)
{
$ses_data = [
'id' => $data['id'],
'name' => $data['name'],
'email' => $data['email'],
'isLoggedIn' => TRUE
];
$session->set($ses_data);
return redirect()->to('/profile');
I want to make it so the admin can log in and direct it to his page.
do this in your admin controller
function index()
{
if($data)
{
$username= $this->input->post('username');
$password= $this->input->post('password');
$row= $this->admins->adminLogin($username, $password);
if(count($row)==1)
{
foreach($row as $val)
{
$data= array('USERID' =>$val->id,
'USERNAME' => $val->username,
'logged_in' => true,
'id' => $val->id,
);
$this->session->set_userdata($data);
}
redirect('admin/dashboard');
}
else
{
$this->session->set_flashdata('message','<div class="alert alert-danger">Invalid Username and Password.</div>');
}
}
$this->load->view('admin/index');
}

Laravel - How to perform Advance Excel Import Validation Message using Maatwebsite

I am using Laravel-8 and Maatwebsite-3.1 package to import Excel into the DB using Laravel API as the endpoint.
Trait:
trait ApiResponse {
public
function coreResponse($message, $data = null, $statusCode, $isSuccess = true) {
if (!$message) return response() - > json(['message' => 'Message is required'], 500);
// Send the response
if ($isSuccess) {
return response() - > json([
'message' => $message,
'error' => false,
'code' => $statusCode,
'results' => $data
], $statusCode);
} else {
return response() - > json([
'message' => $message,
'error' => true,
'code' => $statusCode,
], $statusCode);
}
}
public
function success($message, $data, $statusCode = 200) {
return $this - > coreResponse($message, $data, $statusCode);
}
public
function error($message, $statusCode = 500) {
return $this - > coreResponse($message, null, $statusCode, false);
}
}
Import:
class EmployeeImport extends DefaultValueBinder implements OnEachRow, WithStartRow, SkipsOnError, WithValidation, SkipsOnFailure
{
use Importable, SkipsErrors, SkipsFailures;
public function onRow(Row $row)
{
$rowIndex = $row->getIndex();
if($rowIndex >= 1000)
return; // Not more than 1000 rows at a time
$row = $row->toArray();
$employee = Employee::create([
'first_name' => $row[0],
'other_name' => $row[1] ?? '',
'last_name' => $row[2],
'email' => preg_replace('/\s+/', '', strtolower($row[3])),
'created_at' => date("Y-m-d H:i:s"),
'created_by' => Auth::user()->id,
]);
public function startRow(): int
{
return 2;
}
}
Controller:
public function importEmployee(Request $request)
{
try {
$validator = Validator::make($request->all(), [
'document' => 'file|mimes:xls,xlsx|max:5000',
]);
if ($request->hasFile('document'))
{
if($validator->passes()) {
$import = new EmployeeImport;
$file = $request->file('document');
$file->move(public_path('storage/file_imports/employee_imports'), $file->getClientOriginalName());
Excel::import($import, public_path('storage/file_imports/employee_imports/' . $file->getClientOriginalName() ));
foreach ($import->failures() as $failure) {
$importerror = new ImportError();
$importerror->data_row = $failure->row(); // row that went wrong
$importerror->data_attribute = $failure->attribute(); // either heading key (if using heading row concern) or column index
$importerror->data_errors = $failure->errors()[0]; // Actual error messages from Laravel validator
$importerror->data_values = json_encode($failure->values());
$importerror->created_by = Auth::user()->id;
$importerror->created_at = date("Y-m-d H:i:s");
$importerror->save();
}
return $this->success('Employees Successfully Imported.', [
'file' => $file
]);
}else{
return $this->error($validator->errors(), 422);
}
}
} catch(\Throwable $e) {
Log::error($e);
return $this->error($e->getMessage(), $e->getCode());
}
}
I made it to SkipOnError and SkipOnFailure.
If there's error, it saves the error into the DB. This is working.
However, there is issue, if some rows fail it still display success (Employees Successfully Imported) based on this:
return $this->success('Employees Successfully Imported.
When there is partial upload, or all the rows or some of the rows have issues, I want to display this to the user. So that it will be interactive.
How do I achieve this?
Thanks

Email verification after registration using jwt auth on flutter

I have successfully coded the registration function and its working but I don't know how to send email confirmation link after registration successful. Because I am using JWT Auth for for login and sign up from flutter app with Laravel API.
My login code is:
public function loginapi(Request $request)
{
$input = $request->only('email', 'password');
$email = $request->email;
$jwt_token = null;
if (!$jwt_token = JWTAuth::attempt($input)) {
return response()->json([
'success' => false,
'message' => 'Invalid Email or Password',
]);
}
// get the user
$user = getuserbyemail($email);
$user_ver_status = $user->email_verified_at;
$verified;
if($user_ver_status != null || $user_ver_status != ''){
$verified = true;
}
else{
$verified = false;
}
return response()->json([
'success' => true,
'varified' => $verified,
'token' => $jwt_token,
'users' => $user
]);
}
My Registration Code is:
public function registerapi(Request $request)
{
$sponsor = $request->sponsor;
$username = $request->username;
$email = $request->email;
//$phone = $request->phone;
$password = $request->password;
$getemail = getuserbyemail($email);
$getusern = getuserbyusername($username);
//$getphone = getuserbyphone($phone);
$getSponsor = getuserbySponsor($sponsor);
if($getSponsor == null ||$getSponsor == ''){
return response()->json([
'success' => false,
'message' => 'Sponsor user dose not found...!',
], 401);
}
else if($getemail != null){
return response()->json([
'success' => false,
'message' => 'Email is already existed...!',
], 401);
}
else if($getusern != null){
return response()->json([
'success' => false,
'message' => 'Username is already existed...!',
], 401);
}
else{
$insertuser = insertUser($getSponsor->id, $username, $email, $password);
if($insertuser == "true"){
return response()->json([
'success' => true,
'message' => 'Your account has been registerd successfully...!',
]);
}
else if($insertuser == "false"){
return response()->json([
'success' => false,
'message' => 'There is an error while regestring your account...!',
]);
}
else{
return response()->json([
'success' => false,
'message' => 'There is an UnKnown error while regestring your account...!',
]);
}
}
}
This is my insertUser() Function:
function insertUser(string $sponsor, string $username, string $email, string $password){
$time_now = date("Y-m-d H:i:s");
$updated_at = $time_now;
$created_at = $time_now;
$sponsor_id = $sponsor;
$user_name = $username;
$user_email = $email;
//$user_phone = $phone;
$user_password = $password;
$createUser = User::create([
'sponsor_id' => $sponsor,
'user_name' => $user_name,
'email' => $user_email,
'phone' => null,
'earning' => 0,
'balance' => 0,
'city' => null,
'country' => null,
'image' => null,
'status' => 1,
'password' => Hash::make($user_password),
]);
if($createUser){
return "true";
}
else{
return "false";
}
}
It is registering successful but not sending the verification link on email. How can I achieve that?
Update the question:
I am using Laravel 8 version

Auth user entry in table api

This is friend request code, When i request to another user than token(login user or auth user)didn't entry in table. This is my frd table, you can show here..How can i set auth user as user_id_2 and entry in data table
public function request(Request $request) {
$input =$request->all();
$user = User::find($request->user_id_1);
$friend->user_id_2 = Auth::guard('api')->user()->id;
if(empty($user)){
return [
'status' => 'error',
'msg' => 'no user found'
];
}
if($request->approved == "yes"){
$friend = new Friend();
$friend->user_id_1 = $user->id;
$friend->approved = "yes";
// dd($user);
$friend->save();
$data = array("status" => $user);
return $data;
}
else{
$friend->approved = false;
$friend->save();
return [
'user_id' => $user->id,
'true' => true
];
}
}
Please update your code below.
public function request(Request $request) {
$input =$request->all();
$user = User::find($request->user_id_1);
if(empty($user)){
return [
'status' => 'error',
'msg' => 'no user found'
];
}
if($request->approved == "yes"){
$friend = new Friend();
$friend->user_id_1 = $user->id;
$friend->user_id_2 = Auth::guard('api')->user()->id;
$friend->approved = "yes";
$friend->save();
$data = array("status" => $user);
return $data;
}
else{
$friend->approved = false;
$friend->save();
return [
'user_id' => $user->id,
'true' => true
];
}
}

Web services in laravel 4.2

I have created my API for logging users into my application, but then it responds with the else part as the response
{"error":true,"message":"Check your username or password"}
below is my controller
public function getLogin()
{
$user = array(
'username' => Input::get('username'),
'password' => Input::get('password')
);
if (Auth::attempt($user))
{
$user = User::find(Auth::user()->id);
$role = $user->roles;
if ($role[0]->name == 'Customer')
{
return Response::json(['error' => false, 'message' => 'Customer Logged in successfully', "user"=>$user]);
}
else
{
return Response::json(['error'=>true, 'message'=>'Check your login details']);
}
}
else
{
return Response::json(['error' => true, 'message' => 'Check your username or password']);
}
}

Resources