$name
$name : string
Provider name.
Class DoubanProvider.
$request : \Symfony\Component\HttpFoundation\Request
The HTTP request instance.
$accessToken : \Overtrue\Socialite\AccessTokenInterface
__construct(\Symfony\Component\HttpFoundation\Request $request, string $clientId, string $clientSecret, string|null $redirectUrl = null)
Create a new provider instance.
\Symfony\Component\HttpFoundation\Request | $request | |
string | $clientId | |
string | $clientSecret | |
string|null | $redirectUrl |
redirect(string $redirectUrl = null) : \Symfony\Component\HttpFoundation\RedirectResponse
Redirect the user of the application to the provider's authentication screen.
string | $redirectUrl |
user(\Overtrue\Socialite\AccessTokenInterface $token = null) : \Overtrue\Socialite\User
Get the User instance for the authenticated user.
\Overtrue\Socialite\AccessTokenInterface | $token |
setAccessToken(\Overtrue\Socialite\AccessTokenInterface $accessToken) : $this
\Overtrue\Socialite\AccessTokenInterface | $accessToken |
getAccessToken(string $code) : \Overtrue\Socialite\AccessTokenInterface
{@inheritdoc}.
string | $code |
setRequest(\Symfony\Component\HttpFoundation\Request $request) : $this
Set the request instance.
\Symfony\Component\HttpFoundation\Request | $request |
getRequest() : \Symfony\Component\HttpFoundation\Request
Get the request instance.
getUserByToken(\Overtrue\Socialite\AccessTokenInterface $token) : array
{@inheritdoc}.
\Overtrue\Socialite\AccessTokenInterface | $token |
mapUserToObject(array $user) : \Overtrue\Socialite\User
{@inheritdoc}.
array | $user |
parseAccessToken(\Psr\Http\Message\StreamInterface|array $body) : \Overtrue\Socialite\AccessTokenInterface
Get the access token from the token response body.
\Psr\Http\Message\StreamInterface|array | $body |
getHttpClient() : \GuzzleHttp\Client
Get a fresh instance of the Guzzle HTTP client.
<?php
/*
* This file is part of the overtrue/socialite.
*
* (c) overtrue <i@overtrue.me>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace Overtrue\Socialite\Providers;
use Overtrue\Socialite\AccessTokenInterface;
use Overtrue\Socialite\ProviderInterface;
use Overtrue\Socialite\User;
/**
* Class DoubanProvider.
*
* @see http://developers.douban.com/wiki/?title=oauth2 [使用 OAuth 2.0 访问豆瓣 API]
*/
class DoubanProvider extends AbstractProvider implements ProviderInterface
{
/**
* {@inheritdoc}.
*/
protected function getAuthUrl($state)
{
return $this->buildAuthUrlFromBase('https://www.douban.com/service/auth2/auth', $state);
}
/**
* {@inheritdoc}.
*/
protected function getTokenUrl()
{
return 'https://www.douban.com/service/auth2/token';
}
/**
* {@inheritdoc}.
*/
protected function getUserByToken(AccessTokenInterface $token)
{
$response = $this->getHttpClient()->get('https://api.douban.com/v2/user/~me', [
'headers' => [
'Authorization' => 'Bearer '.$token->getToken(),
],
]);
return json_decode($response->getBody()->getContents(), true);
}
/**
* {@inheritdoc}.
*/
protected function mapUserToObject(array $user)
{
return new User([
'id' => $this->arrayItem($user, 'id'),
'nickname' => $this->arrayItem($user, 'name'),
'name' => $this->arrayItem($user, 'name'),
'avatar' => $this->arrayItem($user, 'large_avatar'),
'email' => null,
]);
}
/**
* {@inheritdoc}.
*/
protected function getTokenFields($code)
{
return parent::getTokenFields($code) + ['grant_type' => 'authorization_code'];
}
/**
* {@inheritdoc}.
*/
public function getAccessToken($code)
{
$response = $this->getHttpClient()->post($this->getTokenUrl(), [
'form_params' => $this->getTokenFields($code),
]);
return $this->parseAccessToken($response->getBody()->getContents());
}
}