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」を使ったものをベースに使わない基本形を作る必要アリ→カスタマイズは結構タイヘンかも
・・・保留中。