Laravel入門トップページ


目次

  1. Composerのダウンロードとインストール
  2. コメント掲示板を作成してみよう
  3. リレーションシップを使いこなそう
  4. ユーザ認証の機能を実現しよう
    1. 概要と準備
    2. メールの設定
    3. 認証機能の実装
    4. 学籍番号の登録とログイン名
    5. 登録メールアドレスの認証
    6. パスワードのリセット
    7. プロフィールの表示
    8. パスワードの変更
  5. マルチ認証の機能を実現しよう
  6. MongoDB に接続しよう
  7. キューを利用しよう
  8. コマンド(コンソール)を利用しよう
  9. 本番環境にデプロイしよう

ユーザ認証の機能を実現しよう

パスワードのリセット

ここではユーザがパスワードを忘れた場合に自分でリセットできるようにしよう.

目次に戻る

実はほぼできている

実は,メール送信機能を設定し,ユーザ認証機能を php artisan make:auth で追加した段階で,パスワードリセットの機能もほぼ実装されている.

ログインページを表示し,「Forgot Your Password?」リンクをクリックする.

reset-1

登録済みで受信可能なメールアドレスを入力して「Send Password Reset Link」ボタンをクリックする.

reset-2

メールの送信ができたら,次のような画面が表示されるはず.

reset-3

実際にメールを受信する.「Reset Password」ボタンをクリックするかメール本文下部のリンクをクリックする.

reset-4

リセットページを開けない.原因はURLが [rin06.ba・・・] ではなく,[localhost] になっているためである.

reset-5

よって,URLの「localhost/・・・」を「rin06.ba.kobegakuin.ac.jp:8000/・・・」のように書き換えてみると接続できる(ここでは林坂の仮想開発環境 [192.168.33.100:8000/・・・] になっています.).メールアドレスと新しいパスワードを入力して「Reset Password」をクリックする.

reset-6

パスワードがリセットされて次のような画面が表示された.

reset-7

リセットしたパスワードを使ってログインができました.

reset-8

目次に戻る

リセットメールのURLを指定する

以上のとおり必要な機能はほぼ実装されており,メールのリンクがおかしいだけである.この問題を解決しよう.

目次に戻る

.env を編集する

アプリケーションの主な設定情報は .env に記述される.この .env の APP_URL を書き換えるだけで良い.また,APP_NAME にアプリケーションの名称を記述しておけば,メールの本文などで利用される.ここも適当な名称に書き換えておこう.

.env (抜粋)
APP_NAME="Laravelユーザ管理システム"
APP_ENV=local
APP_KEY=base64:1ylSjkK2uEeMaHL6azIHRJRhKeMjsm7N39A60YoGsn4=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://rin06.ba.kobegakuin.ac.jp:8385

.env を編集したので,webサーバを再起動する.再起動後,パスワードリセットのリンク送信をしてみよう.今度は正しいリンクが送信されているはずである.なお,.env は git の管理に含まれていない.よって,この変更は .env.example にも反映しておくと良い..env.example は git に含まれているので変更が記録される(ただし,パスワードは保存しないようにしよう).

目次に戻る

データベースで確認

パスワードリセットの情報は pssword_resets テーブルに保存される.実際に sqlite で内容を確認してみよう. password_resets テーブルの内容を,「Send Password Reset Link」ボタンを押す前,ボタンを押してメールが送信された後,メールを受信して実際にパスワードをリセットした後で確認すると次のようになる.つまり,メールを送信してまだリセットされていない状態だけ password_resets に情報が保存される.

[GakuinHana@rin06 laravelUser]$ sqlite3 database/database.sqlite ⏎
SQLite version 3.6.20
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables ⏎
failed_jobs      migrations       users
jobs             password_resets
sqlite> select * from password_resets; ⏎ # 「Send Password Reset Link」ボタンを押す前
sqlite> select * from password_resets; ⏎ # ボタンを押してメールが送信された後
rinsaka@samle.com|$2y$10$cyfm46d6ZQHX5hgVoMM4NuVqOVG6ZXQXN76XZE7cVg0yLeDGToNJ.|2018-07-04 08:39:06
sqlite> select * from password_resets; ⏎ # パスワードをリセットした後
sqlite> .exit ⏎
[GakuinHana@rin06 laravelUser]$

目次に戻る

リセットリンクの有効期限

パスワードリセットのメールに記述されたリンクの有効期限は標準で60分である.この設定は config/auth.php に次の通り記述されている.必要に応じてこの値を変更すれば良い.

config/auth.php (抜粋)
    /*
    |--------------------------------------------------------------------------
    | Resetting Passwords
    |--------------------------------------------------------------------------
    |
    | You may specify multiple password reset configurations if you have more
    | than one user table or model in the application and you want to have
    | separate password reset settings based on the specific user types.
    |
    | The expire time is the number of minutes that the reset token should be
    | considered valid. This security feature keeps tokens short-lived so
    | they have less time to be guessed. You may change this as needed.
    |
    */

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
        ],
    ],

メール送信後,1時間以上経過してリセットしようとすると,次のようなエラーが表示される.この場合,再度リセットのメールを送信すれば良い.

reset-9

目次に戻る