Update Laravel socailite package

Update Laravel socailite package to fix facebook authentication.
This commit is contained in:
Manish Verma
2018-08-16 14:47:19 +05:30
parent cfec60b43f
commit 89809c3123
50 changed files with 647 additions and 361 deletions

View File

@@ -2,6 +2,9 @@
namespace Laravel\Socialite\Two;
use Illuminate\Support\Arr;
use GuzzleHttp\ClientInterface;
class FacebookProvider extends AbstractProvider implements ProviderInterface
{
/**
@@ -16,14 +19,14 @@ class FacebookProvider extends AbstractProvider implements ProviderInterface
*
* @var string
*/
protected $version = 'v2.5';
protected $version = 'v3.0';
/**
* The user fields being requested.
*
* @var array
*/
protected $fields = ['first_name', 'last_name', 'email', 'gender', 'verified'];
protected $fields = ['name', 'email', 'gender', 'verified', 'link'];
/**
* The scopes being requested.
@@ -39,6 +42,13 @@ class FacebookProvider extends AbstractProvider implements ProviderInterface
*/
protected $popup = false;
/**
* Re-request a declined permission.
*
* @var bool
*/
protected $reRequest = false;
/**
* {@inheritdoc}
*/
@@ -52,32 +62,25 @@ class FacebookProvider extends AbstractProvider implements ProviderInterface
*/
protected function getTokenUrl()
{
return $this->graphUrl.'/oauth/access_token';
}
/**
* Get the access token for the given code.
*
* @param string $code
* @return string
*/
public function getAccessToken($code)
{
$response = $this->getHttpClient()->get($this->getTokenUrl(), [
'query' => $this->getTokenFields($code),
]);
return $this->parseAccessToken($response->getBody());
return $this->graphUrl.'/'.$this->version.'/oauth/access_token';
}
/**
* {@inheritdoc}
*/
protected function parseAccessToken($body)
public function getAccessTokenResponse($code)
{
parse_str($body);
$postKey = (version_compare(ClientInterface::VERSION, '6') === 1) ? 'form_params' : 'body';
return $access_token;
$response = $this->getHttpClient()->post($this->getTokenUrl(), [
$postKey => $this->getTokenFields($code),
]);
$data = [];
$data = json_decode($response->getBody(), true);
return Arr::add($data, 'expires_in', Arr::pull($data, 'expires'));
}
/**
@@ -85,9 +88,15 @@ class FacebookProvider extends AbstractProvider implements ProviderInterface
*/
protected function getUserByToken($token)
{
$appSecretProof = hash_hmac('sha256', $token, $this->clientSecret);
$meUrl = $this->graphUrl.'/'.$this->version.'/me?access_token='.$token.'&fields='.implode(',', $this->fields);
$response = $this->getHttpClient()->get($this->graphUrl.'/'.$this->version.'/me?access_token='.$token.'&appsecret_proof='.$appSecretProof.'&fields='.implode(',', $this->fields), [
if (! empty($this->clientSecret)) {
$appSecretProof = hash_hmac('sha256', $token, $this->clientSecret);
$meUrl .= '&appsecret_proof='.$appSecretProof;
}
$response = $this->getHttpClient()->get($meUrl, [
'headers' => [
'Accept' => 'application/json',
],
@@ -103,14 +112,11 @@ class FacebookProvider extends AbstractProvider implements ProviderInterface
{
$avatarUrl = $this->graphUrl.'/'.$this->version.'/'.$user['id'].'/picture';
$firstName = isset($user['first_name']) ? $user['first_name'] : null;
$lastName = isset($user['last_name']) ? $user['last_name'] : null;
return (new User)->setRaw($user)->map([
'id' => $user['id'], 'nickname' => null, 'name' => $firstName.' '.$lastName,
'id' => $user['id'], 'nickname' => null, 'name' => isset($user['name']) ? $user['name'] : null,
'email' => isset($user['email']) ? $user['email'] : null, 'avatar' => $avatarUrl.'?type=normal',
'avatar_original' => $avatarUrl.'?width=1920',
'profileUrl' => isset($user['link']) ? $user['link'] : null,
]);
}
@@ -125,6 +131,10 @@ class FacebookProvider extends AbstractProvider implements ProviderInterface
$fields['display'] = 'popup';
}
if ($this->reRequest) {
$fields['auth_type'] = 'rerequest';
}
return $fields;
}
@@ -152,4 +162,16 @@ class FacebookProvider extends AbstractProvider implements ProviderInterface
return $this;
}
/**
* Re-request permissions which were previously declined.
*
* @return $this
*/
public function reRequest()
{
$this->reRequest = true;
return $this;
}
}