Added oauth login
This commit is contained in:
@@ -2,11 +2,20 @@
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Models\AccountOauth;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use App\Http\Controllers\Controller;
|
||||
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Socialite;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Mail\SocialLink;
|
||||
use App\Models\Oauth;
|
||||
use App\User;
|
||||
use function App\Console\Commands\object_to_array;
|
||||
|
||||
class SocialLoginController extends Controller
|
||||
{
|
||||
public function redirectToProvider($provider)
|
||||
@@ -18,16 +27,97 @@ class SocialLoginController extends Controller
|
||||
{
|
||||
$openiduser = Socialite::with($provider)->user();
|
||||
|
||||
$user = Socialite::with($provider)->findOrCreateUser($openiduser);
|
||||
$oo = Oauth::firstOrCreate(['name'=>$provider,'active'=>TRUE]);
|
||||
|
||||
Auth::login($user,FALSE);
|
||||
// See if this user has connected and linked previously
|
||||
$aoo = $oo->accounts->where('userid',$openiduser->id);
|
||||
|
||||
/*
|
||||
if (! $user->profile_update)
|
||||
if ($aoo->count() == 1)
|
||||
{
|
||||
return redirect()->to(url('settings'));
|
||||
$aoo = $aoo->first();
|
||||
|
||||
if ((is_null($user=$aoo->user) AND (is_null($aoo->account) OR is_null($user=$aoo->account->user))) OR ! $user->active)
|
||||
{
|
||||
if (! $user) {
|
||||
$user = User::where('email',$openiduser->email)->first();
|
||||
}
|
||||
|
||||
if (! $user OR ! $user->active)
|
||||
{
|
||||
return redirect('/login')->with('error','Invalid account, or account inactive, please contact an admin.');
|
||||
}
|
||||
|
||||
return $this->link($provider,$aoo,$user);
|
||||
}
|
||||
|
||||
// All Set to login
|
||||
Auth::login($user,FALSE);
|
||||
|
||||
// If there are too many users, then we have a problem
|
||||
} elseif ($aoo->count() > 1) {
|
||||
return redirect('/login')->with('error','Seems you have multiple oauth IDs, please contact an admin.');
|
||||
|
||||
// User is using OAUTH for the first time.
|
||||
} else {
|
||||
$uo = User::active()->where('email',$openiduser->email);
|
||||
|
||||
// See if their is an account with this email address
|
||||
if ($uo->count() == 1)
|
||||
{
|
||||
$aoo = new AccountOauth;
|
||||
$aoo->userid = $openiduser->id;
|
||||
$aoo->oauth_data = $openiduser->user;
|
||||
$oo->accounts()->save($aoo);
|
||||
|
||||
return $this->link($provider,$aoo,$uo->first());
|
||||
|
||||
// If there are too many users, then we have a problem
|
||||
} elseif ($uo->count() > 1) {
|
||||
return redirect('/login')->with('error','Seems you have multiple accounts, please contact an admin.');
|
||||
|
||||
} else {
|
||||
return redirect('/login')->with('error','Seems you dont have an account with that email, please contact an admin.');
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
return redirect()->intended();
|
||||
}
|
||||
|
||||
/**
|
||||
* We have identified the user and oauth, just need them to confirm the link
|
||||
*
|
||||
* @param $provider
|
||||
* @param User $uo
|
||||
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
||||
*/
|
||||
public function link($provider,AccountOauth $ao,User $uo)
|
||||
{
|
||||
Mail::to($uo->email)->send(new SocialLink($ao));
|
||||
|
||||
return view('auth.social_link')
|
||||
->with('oauthid',$ao->id)
|
||||
->with('provider',$provider);
|
||||
}
|
||||
|
||||
public function linkcomplete(Request $request,$provider)
|
||||
{
|
||||
// Load our oauth id
|
||||
$aoo = AccountOauth::findOrFail($request->post('oauthid'));
|
||||
|
||||
// Check our email matches
|
||||
if (Arr::get($aoo->oauth_data,'email','invalid') !== $request->post('email'))
|
||||
return redirect('/login')->with('error','Account details didnt match to make link.');
|
||||
|
||||
// Check our token matches
|
||||
if ($aoo->link_token !== $request->post('token'))
|
||||
return redirect('/login')->with('error','Token details didnt match to make link.');
|
||||
|
||||
// Load our email.
|
||||
$uo = User::where('email',$request->post('email'))->firstOrFail();
|
||||
|
||||
$aoo->user_id = $uo->id;
|
||||
$aoo->save();
|
||||
Auth::login($uo,FALSE);
|
||||
|
||||
return redirect()->intended();
|
||||
}
|
||||
|
Reference in New Issue
Block a user