【Laravel/PHPUnit】Auth0を使ったログインを行うサービスでのテストでダミーログインを行う

Laravel6
Laravel5
PHP Unit
php
Auth0

Auth0という認証サービスを利用したサービスが増えていますね。
ログインなどを楽にしてくれます。

が、テストのたびにログインを行うのも、Auth0に合わせてテストを書くのも面倒です。
なので「Auth0」でログインしたことにしてしまう方法をご紹介します。

ちなみに若干の制限はありますが、Auth0は無料でも使えます。
個人のプロジェクトでログインを作るのが面倒!という方がいれば使ってみてもいいかもですね!
メールアドレスのログインはもちろん、TwitterやFacebookなどの認証も一瞬で作れます。

Auth0から返ってくる値

[
    'sub' => 'auth0|xx|yyyy',
    'nickname' => 'nickname',
    'name' => 'user name',
    'picture' => 'https://example.com/picture.png',
    'updated_at' => '2020-03-13T08:10:37.855Z',
    'email' => 'example@example.com',
];

のようなデータが返ります。

Auth0でログインしたことにする

Laravelだと以下のようにします

public function setUp(): void
{
    parent::setUp();

    // ダミーユーザデータ
    $dummyAuth0User = [
        'sub' => 'auth0|xxxx|xxxxxxxx',
        'nickname' => 'nickname',
        'name' => 'user name',
        'picture' => 'https://example.com/picture.png',
        'updated_at' => '2020-03-13T08:10:37.855Z',
        'email' => 'example@example.com',
    ];

    // Auth0でログインしたことにする
    $auth0 = new Auth0JWTUser((object)$dummyAuth0User);
    Auth::setUser($auth0);
}

Auth0JWTUserでLaravel用のログイン情報を持ったインスタンスを生成し、
Auth::setUserでログイン情報をセッションなどに書き込みます。

これでテストのたびにAuth0のAPIを叩かずに、疑似ログイン状態でテストを行えます。