旧版のSocialiteでGoogle+ API廃止に対応する

noimage Laravel

Google+の終了に伴いGoogle+ APIが廃止されます。

2019年の1月28日から徐々に使えなくなっていくようです。

Laravelのライブラリ「Socialite」の最新版では新しいログインAPIに対応しているのですが、この最新版はLravel5.7以上を要件としています。

LTS版のLaravel5.5ではそのままcomposerでアップデートすることが出来ず、Google経由へのログインが出来なくなってしまいます。

ということで、ライブラリをどうにかして新しいログインAPIに対応させる必要があるので今回はその紹介です。

スポンサーリンク

ライブラリを直接編集する

まず1つ目はライブラリのファイルを直接編集する方法です。

Laravel SocialiteとGoogle+ API提供終了について|teratail
Laravel5.5とSocialiteを利用しています。 Googleからメール「Google+ APIs being shutdown on March 7, 2019」が届いたのですがGoogle+ APIが終了

この方法は簡単に対応させることが出来ますが、ライブラリ類の再インストールなどでうっかり修正し忘れという事態も考えられます。

新API対応モジュールを作る

今回、私が取った修正方法は新APIに対応したgoogle用モジュールを使用する方法です。

少し手間がかかってしまいますがvendorフォルダーに編集を加えるといったことを行わずに済みます。

今回のモジュールはApp\Libraries\Socialite というディレクトリに作成しました。

別の場所で作成する場合は適宜読み替えください。

モジュール本体の作成

<?php
namespace App\Libraries\Socialite;

use Laravel\Socialite\SocialiteManager;

class GoogleV2SocialManager extends SocialiteManager{

    protected function createGoogleV2Driver()
    {
        $config = $this->app['config']['services.googlev2'];

        return $this->buildProvider(
            'App\Libraries\Socialite\GoogleV2Provider',$config
        );
    }

}
<?php
namespace App\Libraries\Socialite;

use Laravel\Socialite\SocialiteServiceProvider;

class GoogleV2SocialServiceProvider extends SocialiteServiceProvider
{
    public function register()
    {
        $this->app->singleton('Laravel\Socialite\Contracts\Factory',function($app){
            return new GoogleV2SocialManager($app);
        });
    }
}

まずはこの2ファイルを追加します。

そしてモジュール本体となるGoogleV2Provider.phpも作成します。

この部分については本家の最新版のファイルと変わらないのでリンクと、追記部分を書いておきます。

laravel/socialite
Contribute to laravel/socialite development by creating an account on GitHub.
namespace App\Libraries\Socialite;

use Laravel\Socialite\Two\AbstractProvider;
use Laravel\Socialite\Two\ProviderInterface;
use Laravel\Socialite\Two\User;

namespaceは環境に合わせて変更、use文を追加します。

これで、googlev2という名前の新モジュールが完成しました。

スポンサーリンク

モジュールの登録

次にLaravelへ作成したモジュールの登録、設定の追加を行います。

config/app.phpのprovidersにサービスプロバイダーを登録します。

App\Libraries\Socialite\GoogleV2SocialServiceProvider::class,

そして、config/services.phpにAPIキーの設定を追加します。

こちらは元々Google用の設定が追加されているはずなので、同じ物をキーだけ変えて追加します。

'google' => [
    'client_id'     => env('GOOGLE_ID'),
    'client_secret' => env('GOOGLE_SECRET'),
    'redirect'      => env('GOOGLE_CALLBACKURL'),
],

'googlev2' => [
    'client_id'     => env('GOOGLE_ID'),
    'client_secret' => env('GOOGLE_SECRET'),
    'redirect'      => env('GOOGLE_CALLBACKURL'),
],

この設定なら.envに登録されているgoogleのAPI周りの情報をそのまま使用することが可能です。

使用モジュールの差し替え

後はSocialiteでライブラリ本体のモジュールを呼び出している部分を今回作成したgooglev2に差し替えるだけです。

Socialite::driver(‘google’)となっている部分を Socialite::driver(‘googlev2’)に変更すればOKです。

今後Laravel5.7以上にアップデート、ライブラリ側で旧バージョンのLaravel対応版がリリースされるなどの場合はこの部分をgoogleに戻せば解決です。

最後に

以前Yahoo用のSocialiteモジュールを作ったときの情報を参考にして作りました。

ライブラリ自体を直接編集する方法は手軽ですが環境ごとに編集しないといけないのでこちらの方が良いかなと個人的には思います。

Socialiteは公式?のライブラリっぽいのでLTS版に対応してくれると嬉しかったなーと。

コメント

タイトルとURLをコピーしました