mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
Google Auth - Authenticate with backend server (API) (#1405)
* Google OAuth - Authentication with a backend server
This commit is contained in:
parent
ec46107dba
commit
9ff1817c1c
@ -6,6 +6,7 @@ use App\Events\UserSignedUp;
|
|||||||
use App\Http\Requests\RegisterRequest;
|
use App\Http\Requests\RegisterRequest;
|
||||||
use App\Http\Requests\UpdateAccountRequest;
|
use App\Http\Requests\UpdateAccountRequest;
|
||||||
use App\Models\Account;
|
use App\Models\Account;
|
||||||
|
use App\Ninja\OAuth\OAuth;
|
||||||
use App\Ninja\Repositories\AccountRepository;
|
use App\Ninja\Repositories\AccountRepository;
|
||||||
use App\Ninja\Transformers\AccountTransformer;
|
use App\Ninja\Transformers\AccountTransformer;
|
||||||
use App\Ninja\Transformers\UserAccountTransformer;
|
use App\Ninja\Transformers\UserAccountTransformer;
|
||||||
@ -188,25 +189,15 @@ class AccountApiController extends BaseAPIController
|
|||||||
$token = $request->input('token');
|
$token = $request->input('token');
|
||||||
$provider = $request->input('provider');
|
$provider = $request->input('provider');
|
||||||
|
|
||||||
try {
|
$oAuth = new OAuth();
|
||||||
$user = Socialite::driver($provider)->stateless()->userFromToken($token);
|
$user = $oAuth->getProvider($provider)->getTokenResponse($token);
|
||||||
} catch (Exception $exception) {
|
|
||||||
return $this->errorResponse(['message' => $exception->getMessage()], 401);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($user) {
|
if($user) {
|
||||||
$providerId = AuthService::getProviderId($provider);
|
|
||||||
$user = $this->accountRepo->findUserByOauth($providerId, $user->id);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($user) {
|
|
||||||
Auth::login($user);
|
Auth::login($user);
|
||||||
|
|
||||||
return $this->processLogin($request);
|
return $this->processLogin($request);
|
||||||
} else {
|
|
||||||
sleep(ERROR_DELAY);
|
|
||||||
|
|
||||||
return $this->errorResponse(['message' => 'Invalid credentials'], 401);
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
return $this->errorResponse(['message' => 'Invalid credentials'], 401);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
44
app/Ninja/OAuth/OAuth.php
Normal file
44
app/Ninja/OAuth/OAuth.php
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
<?php namespace App\Ninja\OAuth;
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
|
|
||||||
|
class OAuth {
|
||||||
|
|
||||||
|
private $providerInstance;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getProvider($provider)
|
||||||
|
{
|
||||||
|
switch ($provider)
|
||||||
|
{
|
||||||
|
case 'google';
|
||||||
|
$this->providerInstance = new Providers\Google();
|
||||||
|
return $this;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getTokenResponse($token)
|
||||||
|
{
|
||||||
|
$email = null;
|
||||||
|
$user = null;
|
||||||
|
|
||||||
|
if($this->providerInstance)
|
||||||
|
$user = User::where('email', $this->providerInstance->getTokenResponse($token))->first();
|
||||||
|
|
||||||
|
if ($user)
|
||||||
|
return $user;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
?>
|
23
app/Ninja/OAuth/Providers/Google.php
Normal file
23
app/Ninja/OAuth/Providers/Google.php
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?php namespace App\Ninja\OAuth\Providers;
|
||||||
|
|
||||||
|
class Google implements ProviderInterface
|
||||||
|
{
|
||||||
|
|
||||||
|
public function getTokenResponse($token)
|
||||||
|
{
|
||||||
|
|
||||||
|
$client = new \Google_Client(['client_id' => env('GOOGLE_CLIENT_ID','')]);
|
||||||
|
$payload = $client->verifyIdToken($token);
|
||||||
|
if ($payload)
|
||||||
|
return $this->harvestEmail($payload);
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function harvestEmail($payload)
|
||||||
|
{
|
||||||
|
return $payload['email'];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
9
app/Ninja/OAuth/Providers/ProviderInterface.php
Normal file
9
app/Ninja/OAuth/Providers/ProviderInterface.php
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<?php namespace App\Ninja\OAuth\Providers;
|
||||||
|
|
||||||
|
interface ProviderInterface
|
||||||
|
{
|
||||||
|
public function getTokenResponse($token);
|
||||||
|
|
||||||
|
public function harvestEmail($response);
|
||||||
|
|
||||||
|
}
|
@ -83,7 +83,8 @@
|
|||||||
"nwidart/laravel-modules": "^1.14",
|
"nwidart/laravel-modules": "^1.14",
|
||||||
"jonnyw/php-phantomjs": "4.*",
|
"jonnyw/php-phantomjs": "4.*",
|
||||||
"collizo4sky/omnipay-wepay": "^1.3",
|
"collizo4sky/omnipay-wepay": "^1.3",
|
||||||
"barryvdh/laravel-cors": "^0.9.1"
|
"barryvdh/laravel-cors": "^0.9.1",
|
||||||
|
"google/apiclient":"^2.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": "~4.0",
|
"phpunit/phpunit": "~4.0",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user