alexsoft/laravel-socialite-bitbucket

为Laravel Socialite提供的Bitbucket OAuth2提供程序

v2.0.1 2017-06-23 08:59 UTC

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提供程序

Packagist Software License StyleCI

此包允许您使用 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'];

由于某种原因,在此操作之后刷新令牌没有更新,因此您不需要在您的存储中更新它。