alexsoft / laravel-socialite-bitbucket
为Laravel Socialite提供的Bitbucket OAuth2提供程序
Requires
- php: >=7.0.0
- laravel/socialite: ^3.0
This package is auto-updated.
Last update: 2024-08-29 04:08:50 UTC
README
Laravel Socialite 本身支持 Bitbucket oAuth 2。强烈建议使用。 https://laravel.net.cn/docs/socialite 现在已弃用。
为Laravel Socialite提供的Bitbucket OAuth2提供程序
此包允许您使用 OAuth 2 的 Bitbucket 通过 Laravel Socialite。
安装
您可以通过 composer 安装此包
Laravel 5.4+
composer require alexsoft/laravel-socialite-bitbucket
Laravel 5.0 - 5.3
您需要使用 1.0 版本。用法保持不变。
composer require alexsoft/laravel-socialite-bitbucket:^1.0
注意:如果您使用 Laravel 5.5+,则可以跳过服务提供者注册,因为它应该自动发现。
然后您应该在您的 config/app.php
文件中注册服务提供者
'providers' => [ // Other service providers Alexsoft\LaravelSocialiteBitbucket\Provider::class, ]
您还需要在您 Bitbucket 账户的 OAuth 设置页面获取 OAuth 应用程序的凭据。它们应放在您的 config/services.php
文件中。您可以将下面的示例配置复制过来开始使用
'bitbucket' => [ 'client_id' => env('BITBUCKET_CLIENT_ID'), 'client_secret' => env('BITBUCKET_CLIENT_SECRET'), 'redirect' => env('BITBUCKET_REDIRECT'), ],
基本用法
现在,您已经准备好对用户进行身份验证了!您需要两个路由:一个用于将用户重定向到 OAuth 提供程序,另一个用于接收提供程序在身份验证后返回的回调。我们将使用 Socialite 门面访问 Socialite
<?php namespace App\Http\Controllers\Auth; use Socialite; class AuthController extends Controller { /** * Redirect the user to the Bitbucket authentication page. * * @return Response */ public function redirectToProvider() { return Socialite::driver('bitbucket2')->redirect(); } /** * Obtain the user information from GitHub. * * @return Response */ public function handleProviderCallback() { $user = Socialite::driver('bitbucket2')->user(); // $user->token; } }
当然,您需要定义到您控制器方法的路由
Route::get('auth/bitbucket', 'Auth\AuthController@redirectToProvider'); Route::get('auth/bitbucket/callback', 'Auth\AuthController@handleProviderCallback');
重定向方法负责将用户发送到 OAuth 提供程序,而用户方法将读取传入的请求并从提供程序中检索用户信息。
Bitbucket Oauth2 不支持请求上的范围,所有范围都在 OAuth 应用程序设置中配置。
检索用户详细信息
一旦您有了用户实例,您就可以获取更多有关用户的信息
$user = Socialite::driver('bitbucket2')->user(); // OAuth Two Providers $token = $user->token; $refreshToken = $user->refreshToken; // may not always be provided $expiresIn = $user->expiresIn; // OAuth One Providers $token = $user->token; $tokenSecret = $user->tokenSecret; // All Providers $user->getId(); $user->getNickname(); $user->getName(); $user->getEmail(); $user->getAvatar();
注意
与 Github 不同,Bitbucket 只提供一小时有效的令牌,因此您需要刷新访问令牌。
以下是刷新令牌的代码片段(需要 Guzzle)
$options = [ 'auth' => [config('services.bitbucket.client_id'), config('services.bitbucket.client_secret')], 'form_params' => [ 'grant_type' => 'refresh_token', 'refresh_token' => "BITBUCKET_REFRESH_TOKEN" ] ]; $response = (new GuzzleHttp\Client) ->post('https://bitbucket.org/site/oauth2/access_token', $options) ->getBody()->getContents(); $response = json_decode($response, true); $newAccessToken = $response['access_token'];
由于某种原因,在此操作之后刷新令牌没有更新,因此您不需要在您的存储中更新它。