ラボ > Laravel、Lumen:ユーザー認証関連

Laravel ユーザ認証絡み

作成日:2019-03-29, 更新日:2022-12-22

基本

・コンソールから「php artisan make:auth」を実行
→実行したくない。

・・・他のサイトを見るとコントローラーとかのソースはあるけどビューの記載がない。

しょうがないのでXamppで確認してみる。

Xamppで実行

現在、勉強用に使っているLaravelに何かするってのはイヤだ。
・・・ということで、再度新規にLaravelをインストールする(参考:Laravel Xamppにインストから最低限のセットまで
※「PHP7.2.3」「Laravel5.7.*」。

▼新たにインストしたLaravelのPATH
・Xampp\htdocs\laravel2
├src/
│├app/
│├bootstrap/
│├artisan
│├略
│└略
├css/
├js/
├svg/
├index.php
├robots.txt
 ├略
 └略

authのファイル作成

▼コンソールで下記実行

# cd 〇〇〇\Xampp\htdocs\laravel2
# php artisan make:auth

▼実行後コンソールに表示

Authentication scaffolding generated successfully.

追加・修正されたファイル

【注意】作られるファイルは基本、英語のみ
→初回テキストエディタで開くとShiftJisになる可能性高い
→日本語使うとエラー

コントローラ

▼追加:src\app\Http\Controllers\HomeController.php

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller {
    public function __construct() {
        $this->middleware('auth');
    }

    public function index() {
        return view('home');
    }
}

ルーティング

▼修正:routes\web.php

Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');

「Auth::routes();」は
・「src\vendor\laravel\framework\src\Illuminate\Support\Facades\Auth.php」の「routes()」を経由して
・「src\vendor\laravel\framework\src\Illuminate\Routing\Router.php」の「auth()」を呼び出す

ビュー

▼追加:ファイルが多いのでソースを書き出すのは諦めた。
・src\resources\views\
├auth\
│├passwords\
││├email.blade.php
││└reset.blade.php
│├login.blade.php
│├register.blade.php
│└verify.blade.php
├layouts\
│└app.blade.php
└home.blade.php

DBの設定

・「src\.env」にDBの接続設定を行う
・コンソールから「php artisan」を実行

# php artisan migrate

▼結果

Illuminate\Database\QueryException  : SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`))

→「ユニークキーの設定は767bytesしか受け付けないよ」っていう内容らしい

Larabelは「utf8mb4_unicode_ci」でテーブルを作る(※設定次第)
※MySQLにしろMariaDBにしろバージョンによってはエラーが出てくる

▼対策:下記のどっちか(他にも方法はあるっぽい)
・MySQLを最新バージョンにする
・「charaset」の「utf8mb4_unicode_ci」を変更
→今回は「charaset」を「utf8mb4_unicode_ci」を「utf8_general_ci」にする。

文字コードを修正して、テーブル作成コマンド

▼「src\config\database.php」を修正

~ 略 ~
'connections' => [
    ~ 略 ~
    'mysql' => [
        ~ 略 ~
        //'charset' => 'utf8mb4',
        //'collation' => 'utf8mb4_unicode_ci',
        'charset' => 'utf8',
        'collation' => 'utf8_general_ci',
        ~ 略 ~
~ 略 ~

▼作られたテーブルを削除して再度コンソールから実行

# php artisan migrate

▼結果

Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table

▼次回「php artisan」を実行しなくても良いようにSQLを書き出す:たぶん「migrations」はいらないので記載はしない

CREATE TABLE `password_resets` (
  `email` varchar(255) NOT NULL,
  `token` varchar(255) NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `users` (
  `id` int(10) UNSIGNED NOT NULL,
  `name` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `email_verified_at` timestamp NULL DEFAULT NULL,
  `password` varchar(255) NOT NULL,
  `remember_token` varchar(100) DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `password_resets`
  ADD KEY `password_resets_email_index` (`email`);

ALTER TABLE `users`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `users_email_unique` (`email`);

ALTER TABLE `users`
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT;

メールサーバの設定

・「src\.env」にメールサーバの設定を行う(参照:Laravelのmailableクラスでメール送信を行う[導入/入門編] / 2017-11-25
→メールはパスワードリセットで使う

パスワードリセットしないなら無くても大丈夫。

「php artisan」を使わない基本形

「php artisan」で出来上がったものは融通がきかない感じ・・・。
→「php artisan」を使ったものをベースに使わない基本形を作る必要アリ→カスタマイズは結構タイヘンかも
・・・保留中。