Created
December 21, 2016 20:11
-
-
Save omarkdev/15b1c76b9737cf834cd48d7bbf66da16 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace App\Http\Controllers\Auth; | |
use Illuminate\Http\Request; | |
use App\Http\Controllers\Controller; | |
use App\Models\User; | |
use Illuminate\Support\Facades\Validator; | |
use Illuminate\Support\Facades\Auth; | |
use SammyK\LaravelFacebookSdk\LaravelFacebookSdk; | |
class FacebookController extends Controller | |
{ | |
/** | |
* Check user exists | |
* | |
* @var bool | |
*/ | |
protected $userExists = false; | |
/** | |
* Create a new user instance after a valid registration. | |
* | |
* @param array $data | |
* @param $token | |
* | |
* @return static | |
*/ | |
protected function createOrUpdate(array $data, $token) | |
{ | |
$user = User::firstOrNew(['email' => $data['email']]); | |
$user->access_token = (string) $token; | |
$this->userExists = $user->exists; | |
if(!$user->exists){ | |
$user->facebook_user_id = $data['id']; | |
$user->email = $data['email']; | |
$user->name = $data['name']; | |
} | |
$user->save(); | |
return $user; | |
} | |
/** | |
* Authenticate the user | |
* | |
* @param $user | |
* | |
* @return mixed | |
*/ | |
protected function authenticate($user) | |
{ | |
return Auth::login($user); | |
} | |
/** | |
* Go back with _error message | |
* | |
* @param $message | |
* | |
* @return \Illuminate\Http\RedirectResponse | |
*/ | |
protected function errorBack($message) | |
{ | |
return redirect()->back()->with('_error', $message); | |
} | |
/** | |
* Return $graphUser format | |
* | |
* @param $graphUser | |
* | |
* @return array | |
*/ | |
protected function formatGraphUser($graphUser) | |
{ | |
return [ | |
'name' => $graphUser['name'], | |
'email' => $graphUser['email'], | |
'id' => $graphUser['id'] | |
]; | |
} | |
/** | |
* Register user | |
* | |
* @param LaravelFacebookSdk $facebookSdk | |
* | |
* @return \Illuminate\Http\RedirectResponse | |
*/ | |
public function register(LaravelFacebookSdk $facebookSdk) | |
{ | |
if(Auth::check()){ | |
return redirect()->route('welcome.index'); | |
} | |
try { | |
$token = $facebookSdk->getAccessTokenFromRedirect(); | |
} catch (Facebook\Exceptions\FacebookSDKException $e) { | |
return $this->errorBack('Ocorreu um erro, tente novamente ou se cadastre manualmente.'); | |
} | |
if(!$token){ | |
return $this->errorBack('Erro ao obter token, tente novamente ou se cadastre manualmente.'); | |
} | |
if(!$token->isLongLived()){ | |
$oauth_client = $facebookSdk->getOAuth2Client(); | |
try { | |
$token = $oauth_client->getLongLivedAccessToken($token); | |
} catch (Facebook\Exceptions\FacebookSDKException $e) { | |
return $this->errorBack('Erro ao estender o token.'); | |
} | |
} | |
$facebookSdk->setDefaultAccessToken($token); | |
session(['user_facebook_access_token' => (string) $token]); | |
try { | |
$response = $facebookSdk->get('/me?fields=id,name,email'); | |
} catch (Facebook\Exceptions\FacebookSDKException $e) { | |
return $this->errorBack('Erro ao obter suas informações'); | |
} | |
$graphUser = $this->formatGraphUser($response->getGraphUser()); | |
$this->authenticate($this->createOrUpdate($graphUser, $token)); | |
if(!$this->userExists) | |
return redirect()->route('welcome.index')->with('_success', 'Seja Bem-Vindo ao Sherlock!'); | |
return redirect()->route('welcome.index'); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment