5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Laravel】Socialite・Microsoft Graphを使用しOAuth認証

Last updated at Posted at 2021-03-10

目的

本記事の目的は、LaravelのSocialiteMicrosoft Graphを使用し、OAuth認証Microsoftアカウントのユーザー情報を取得することです。

前提

フレームワーク・ライブラリ バージョン
PHP 7.3
Laravel 5.8.36
socialiteproviders/microsoft-graph 3.*

適宜、各自の環境に合わせたバージョンを使用してください。

手順

手順 概要
手順1 Microsoft Azure Directory admin centerで各種設定
手順2 socialiteproviders/microsoft-graphをインストール
手順3 設定
手順4 ルート
番外編 Socialiteの便利なメソッド
  • ComposerやLaravelのインストール等の環境構築は各自で行ってください。
  • Microsoftアカウントは各自で用意してください。

手順1 Microsoft Azure Directory admin centerで各種設定

こちらの記事がわかりやすいので参考にしてください。

手順2 socialiteproviders/microsoft-graphをインストール

composer require socialiteproviders/microsoft-graph

バージョンを指定する場合はcomposer require socialiteproviders/microsoft-graph 3.*

手順3 設定

config/app.php
'providers' => [
    // ...
    \SocialiteProviders\Manager\ServiceProvider::class, 
],
app/Providers/EventServiceProvider.php
<?php

namespace App\Providers;

use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Event;

class EventServiceProvider extends ServiceProvider
{
    /**
     * The event listener mappings for the application.
     *
     * @var array
     */
    protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
        ],
        // 下記を追加
        \SocialiteProviders\Manager\SocialiteWasCalled::class => [
            'SocialiteProviders\\Graph\\GraphExtendSocialite@handle',
        ],
        // ここまで
    ];

    /**
     * Register any events for your application.
     */
    public function boot(): void
    {
        parent::boot();
    }
}
config/services.php
return [
    'graph' => [
        'client_id' => env('GRAPH_CLIENT_ID'),
        'client_secret' => env('GRAPH_CLIENT_SECRET'),
        'redirect' => env('GRAPH_REDIRECT_URI')
    ],
];

こちらの記事を参考にして設定した値を入力してください。

GRAPH_CLIENT_ID=client_id
GRAPH_CLIENT_SECRET=secret_key
GRAPH_REDIRECT_URI=設定したリダイレクトURL

手順4 ルート

routes/web.php
Route::get('login/graph', 'Auth\LoginController@redirectToProvider');
Route::get('login/graph/callback', 'Auth\LoginController@handleProviderCallback');
app/Http/Controllers/Auth/LoginController.php

namespace App\Http\Controllers\Auth;

use Socialite;

class LoginController extends Controller
{
    /**
     * Microsoftの認証ページヘユーザーをリダイレクト
     *
     * @return \Illuminate\Http\Response
     */
    public function redirectToProvider()
    {
        return Socialite::driver('graph')->redirect();
    }

    /**
     * Microsoftからユーザー情報を取得
     *
     * @return \Illuminate\Http\Response
     */
    public function handleProviderCallback()
    {
        $user = Socialite::driver('graph')->user();
        dd($user); // 出力
    }
}

ddでユーザー情報が取得できているはずです。
公式のGitHubで参考コードが多く載せられています。

番外編

Socialitの便利なメソッドの紹介です。

API開発の場合はstatelessメソッドが便利です。

return Socialite::driver('graph')->stateless()->user();

オプションのパラメータはwithメソッドが便利です。オプションのパラメータの詳細は、公式サイトでご確認ください。例えば、redirectToProviderアクションからhandleProviderCallbackアクションまで状態を保持したい場合は、stateオプションを使用することができます。


    public function redirectToProvider()
    {
        return Socialite::driver('graph')->with(['state' => 'hoge'])->redirect();
    }

    public function handleProviderCallback(Request $request)
    {
        dd($request['state']); // hogeが出力される
        $user = Socialite::driver('graph')->user();
    }

参考

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?