Social login API in Laravel Full code
First, create route
Route::post('/sociallogin', 'Auth\LoginController@sociallogin');
look like in route folder Api.php
next setup
create a login controller in Auth folder
write a function look like this
write the code according my project condition
public function sociallogin(Request $request) {
$host = $request->getHttpHost();
$isvalidateuser=false;
$user=null;
$data=$request->all();
$Isnotificaion=1;
// $rUrl=url()
$datatype=$data['type'];
$access_token=$data['access_token'];
$resp=null;
if($datatype=='google')
{
$rUrl = 'https://www.googleapis.com/oauth2/v1/userinfo?access_token='.$access_token;
}
else
{
$rUrl = 'https://graph.facebook.com/me?fields=id,name,email,first_name&access_token='.$access_token;
}
$ch = curl_init();
$timeout = 60;
curl_setopt($ch,CURLOPT_URL,$rUrl);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
$resp = curl_exec($ch);
$newuser=0;
if(!curl_errno($ch))
{
$json = json_decode($resp, true);
if(array_key_exists('email', $json))
{
$email=$json['email'];
if($email!=null && $email==$data['email'])
{
//check if user exist
$name=$json['name'];
$user = User::where('email',$data['email'])->whereIn('user_role', [0])->first();
if( $user==null)
{
$hashed_random_password = Hash::make(str_random(8));
User::create([
'name' => $name,
'email' => $email,
'password' =>$hashed_random_password,
]);
$newuser=1;
$userid=User::where(['email'=> $data['email'],'status' => 1])->whereIn('user_role', [0])->first();
$currenttime = Carbon\Carbon::now();
$cdt = encrypt($currenttime);
try{
Mail::send(['html'=>'mail'],
['status' => 16,'name' => $userid['name'],'email' =>urlencode($userid['email']),'id'=>$userid->id,'host'=>$host,'expiredt'=> $cdt], function($message) use ($userid) {
$message->to($userid->email)->subject
('Confirm your email address');
$message->from('admin@jobtiviti.com','Jobtiviti');
});
}
catch(Exception $exception){
$expc= $exception->getMessage();
$path = url()->current();
$url = $request->fullUrl();
$parentmethod=$request->root();
$datetime=Carbon\Carbon::now();
ExceptionHandle::excetionStore($expc,$path,$url,$parentmethod,$datetime);
}
}
else{
$userDelete = User::where(['email'=>$data['email'],'status'=>-1])->whereIn('user_role', [0])->orderby('updated_at','desc')->first();
if(!empty($userDelete) && $userDelete!=null) {
$UpdateDate = date('Y-m-d', strtotime($userDelete['updated_at']));
$datework = Carbon\Carbon::parse($UpdateDate);
$now = Carbon\Carbon::now()->format('Y-m-d');
$deleteDays = $datework->diffInDays($now);
if($deleteDays>14){
$hashed_random_password = Hash::make(str_random(8));
User::create([
'name' => $name,
'email' => $email,
'password' =>$hashed_random_password,
]);
$newuser=1;
$userid=User::where(['email'=> $data['email'],'status' => 1])->whereIn('user_role', [0])->first();
$currenttime = Carbon\Carbon::now();
$cdt = encrypt($currenttime);
try{
Mail::send(['html'=>'mail'],
['status' => 16,'name' => $userid['name'],'email' => urlencode($userid['email']),'id'=>$userid->id,'host'=>$host,'expiredt'=> $cdt], function($message) use ($userid) {
$message->to($userid->email)->subject
('Confirm your email address');
$message->from('admin@jobtiviti.com','Jobtiviti');
});
}
catch(Exception $exception){
$expc= $exception->getMessage();
$path = url()->current();
$url = $request->fullUrl();
$parentmethod=$request->root();
$datetime=Carbon\Carbon::now();
ExceptionHandle::excetionStore($expc,$path,$url,$parentmethod,$datetime);
}
}
}
}
}
else
{
return response()->json([
'data' => array('message' => 'Login failed'),
'status' => 'error'
]);
}
}
else
{
return response()->json([
'data' => array('message' => 'Login failed'),
'status' => 'error'
]);
}
}
$user = User::where(['email'=> $data['email'],'status' => 1])->whereIn('user_role', [0])->first();
if ( $user!=null)
{
//start device_id code
if(isset($data['device_token']))
{
//dd($data['device_token']);
$user_devicemap=UserDevice::where('user_id','=',$user->id)->first();
if(isset($user_devicemap) && $user_devicemap!=null)
{
//update all set all user to null with current device_id
$mapdata=UserDevice::where('device_token','=',$data['device_token'])->where('user_id','<>',$user->id)->update(array('device_token' => null));
//update device_id to cuurent uset;
//update device_id to cuurent uset;
$Isnotificaion=$user_devicemap->is_enable;
if($user_devicemap->is_enable==1)
{
$user_devicemap->device_token=$data["device_token"];
$user_devicemap->save();
}
}
else
{
//update all set all user to null with current device_id
$mapdata=UserDevice::where('device_token',$data['device_token'])->update(array('device_token' => null));
//insert new entry for current user;
$map_data= UserDevice::create([
'user_id' =>$user->id,
'is_enable' => 1,
'device_token' =>$data["device_token"],
]);
}
}
if(!is_null($user['referrer_type']) )
{
$photoURL = url("user_photos");
$user->generateToken();
$userId = $user->id;
$userData = $user->toArray();
//if( is_null($user['university']) || $user['university']==0 )
// {
// $univ=UniversityMaps::where('user_id',$userId)->first();
// if(!is_null($univ))
// {
// $userData['university']=$univ['id'];
// }
// }
$userData["newuser"]=$newuser;
$userData["referrer_type"]=$user['referrer_type'];
if ($userData['photo']) {
$temp = $userData['photo'];
$userData['photo'] = $photoURL . "/" . $temp;
}
// if ($userData['graduation_year']!= 0 && $userData['university']!=0 ) {
return response()->json([
'data' => $userData,
'status' => 'success'
]);
// } else {
// $data1= User::select('id','name','email','graduation_year','university','aspiration_message','referrer_type')->where(['email'=> $data['email'],'status' => 1])->whereIn('user_role', [0])->first();
// $data1['newuser']=$newuser;
// return response()->json([
// 'data' =>$data1,
// 'status' => 'success'
// ]);
// }
}
else
{
$data1= User::select('id','name','email','graduation_year','university','aspiration_message','referrer_type')->where(['email'=> $data['email'],'status' => 1])->whereIn('user_role', [0])->first();
$data1['newuser']=$newuser;
return response()->json([
'data' => $data1,
'status' => 'success'
]);
}
}
else
{
$userexist = User::where(['email'=>$data['email'],'status' => -1])->whereIn('user_role', [0])->orderby('updated_at','desc')->first();
if($userexist!=null)
{
if(isset($data['device_token']))
{
//dd($data['device_token']);
$user_devicemap=UserDevice::where('user_id','=',$userexist->id)->first();
if(isset($user_devicemap) && $user_devicemap!=null)
{
//update all set all user to null with current device_id
$mapdata=UserDevice::where('device_token','=',$data['device_token'])->where('user_id','<>',$userexist->id)->update(array('device_token' => null));
//update device_id to cuurent uset;
//update device_id to cuurent uset;
$Isnotificaion=$user_devicemap->is_enable;
if($user_devicemap->is_enable==1)
{
$user_devicemap->device_token=$data["device_token"];
$user_devicemap->save();
}
}
else
{
//update all set all user to null with current device_id
$mapdata=UserDevice::where('device_token',$data['device_token'])->update(array('device_token' => null));
//insert new entry for current user;
$map_data= UserDevice::create([
'user_id' =>$userexist->id,
'is_enable' => 1,
'device_token' =>$data["device_token"],
]);
}
}
//end device_id code
$photoURL = url("user_photos");
$userId = $userexist->id;
if(!is_null($userexist['graduation_year']) && !is_null($userexist['university']))
{
$userData = $userexist->toArray();
$update_at=$userexist->updated_at;
$datefrom = date('d M Y H:i', strtotime($update_at));
$userData['DeletedDate']=$datefrom;
$userData["newuser"]=$newuser;
$userData["referrer_type"]=$userexist['referrer_type'];
if($userData['university']==null || $userData['university']==0 )
{
$univ=UniversityMaps::where('user_id',$userId)->first();
if($univ!=null)
{
$userData->university=$univ['id'];
}
}
if ($userData['photo']) {
$temp = $userData['photo'];
$userData['photo'] = $photoURL . "/" . $temp;
}
if ($userData['graduation_year']!= 0 && $userData['university']!=0) {
return response()->json([
'data' => $userData,
'status' => 'success'
]);
} else {
return response()->json([
'data' => array('message' => 'Login failed.'),
'status' => 'error'
]);
}
}
else
{
$data1= User::select('id','name','email','graduation_year','university','aspiration_message','referrer_type')->where(['email'=> $data['email'],'status' => 1])->whereIn('user_role', [0])->first();
$data1['newuser']=$newuser;
return response()->json([
'data' =>$data1,
'status' => 'success'
]);
}
}
else
{
return response()->json([
'data' => 'Login Email or Password are incorrect,
'status' => 'error'
]);
}
}
return $this->sendFailedLoginResponse($request);
}
No comments