『Laravel入門編5: Laravelでユーザー管理しよう (全9回)』
これでLaravel入門編も最後のレッスンだな〜
内容も結構難しかったけど、
処理が重いせいか何度もPCがフリーズしたり、
ジャッジに時間がかかり過ぎてタイムアウトしたり、
となんか色々大変だったな😩
メモ
#01:ユーザー管理機能を理解しよう
- Laravel:標準でユーザー管理機能を持つ
- ユーザー情報:Userモデル、マイグレーションファイル
- ユーザーの認証:
ログイン・ログアウト・パスワード変更などのコントローラとビューを標準装備 - アクセスの許可:
アクセス制御に利用できるヘルパー関数やクラス
- 参考になるWebページ
- - 認証 5.7 Laravel
https://readouble.com/laravel/5.7/ja/authentication.html - - 認可 5.7 Laravel
https://readouble.com/laravel/5.7/ja/authorization.html - - Bladeテンプレート 5.7 Laravel
https://readouble.com/laravel/5.7/ja/blade.html - - Laravelの標準Authentication(Auth)の動きを調べてみる - Qiita
https://qiita.com/zaburo/items/9fcf0f4c771e011a4d35 - - Laravel 5.5 の認証機能とそのカスタマイズ - Qiita
https://qiita.com/naga3/items/4f3defde59b31a1a797e - - Laravelで爆速API開発シリーズ「認可編」 | WINDII
https://windii.jp/laravel/authorization - - Laravel5.7: ログイン機能を追加する - Qiita
https://qiita.com/sutara79/items/fdbfbf2a8f86f7d8f7fb - - Laravel5.7: postsとusersを関連させる - Qiita
https://qiita.com/sutara79/items/9e57e7af03b65e0d6047
- - 認証 5.7 Laravel
#02:ユーザー管理機能を追加しよう
- 新規のアプリケーションディレクトリを追加する$ laravel new test_auth
- ユーザー管理用のファイル
- app/Models/User.php
- database/migrations/20xx_xx_xx_000000_create_users_table.php
- database/migrations/20xx_xx_xx_000000_create_password_resets_table.php
- ユーザー管理機能を自動生成$ php artisan make:auth
- これで、ユーザー管理用のルートとビューを追加する。
※ ってあるけど、Laravel6.x以降 php artisann make:auth コマンドは無くなったらしい(Web上の環境は、Laravel5系が使われている)。そこで、以下のサイトを参考に、必要なライブラリをインストールして、異なるコマンドを実行する必要がある。#laravel8の場合
composer require laravel/ui
php artisan ui vue --auth
- 登録されているルートを確認するには、次のコマンドを実行する。
php artisan route:list
#03:ユーザー管理用のテーブルを用意しよう
- ユーザー管理用データベースを作成する:myauth
- データベース設定 :.envファイルの編集
- マイグレート$ php artisan migrate
※ ここでの作業による変更は、gitに認識されなかった。
#04:ログインフォームの動作確認をしよう
- ユーザー登録やログイン画面を実際に操作して、どのような機能ができたのか把握する。
#05:ログイン機能を追加しよう
Lunchmapアプリにユーザー管理機能を組み込んでいく。
まずは、ユーザー管理用のルートとビューを追加して、ユーザー登録とログイン機能を有効にする。
- ユーザー管理用のルートとビューを追加
- Laravel5系の場合
$ php artisan make:auth - Laravel6以降の場合composer require laravel/uiphp artisan ui vue --auth
- Laravel5系の場合
- 共通テンプレートに、ログイン用のコードを追加する
- resources/views/layout.blade.phpのheadタグの編集
- resources/views/auth/app.blade.phpのナビゲーションバーにあるログイン用リンクのボタンのコードを、resources/views/layout.blade.phpのナビゲーションバー部分にコピーする。
- csrf_token()とは?
これはCross Site Request Forgery(リクエスト強要)と呼ばれる攻撃手法に対策するもの。CSRFはWebアプリケーションへのリクエストを記述した命令を不本意に実行させて、その人の権限でリクエストを実行させるという攻撃のこと。
※ 自分の環境の場合、登録したユーザーでログインはできるが、ログアウトができない。そもそもログアウトボタンが表示されない。
#06:アクセス制御を追加しよう
ログインしている時だけ、お店情報を投稿・更新・削除できるようにする。
- ログインしていない時、実行しないメソッドを指定する
app/Http/Controllers/ShopController.phpの編集- public function __construct()
- お店一覧のリンクを制御
resources/views/index.blade.php
#07:お店情報にユーザー情報を追加しよう
- カラムを追加するためのマイグレーションファイルを生成$ php artisan make:migration add_user_id_to_shops_table --table=shops
- マイグレーションファイルに、user_idカラムを追加database/migrations/20xx_xx_xx_xxxxxx_add_user_id_to_shops_table
- upメソッド
$table->integer('user_id');
- upメソッド
- マイグレート$ php artisan migrate
- usersテーブルにuser_idを登録
- idが1のレコードに、user_id=1
- idが2以上のレコードに、user_id=2
(SQL)UPDATE shops
SET user_id=2
WHERE id>=2;
- Shopモデルに、Userへのリレーションを追加app/Models/Shop.phpの編集
- public function user()の作成
- お店一覧に、ユーザー名を追加する
resources/views/index.blade.phpの編集
#08:自分で投稿したお店情報のみ、更新・削除できるようにしよう
- 新規投稿時に、user_idカラムを保存する
app/Http/Controllers/ShopController.phpの編集- public function store(Request $request)の編集
- showメソッドで、ログインユーザー情報を取得してビューに渡す
app/Http/Controllers/ShopController.phpの編集- public function show($id)の編集
- ログインユーザーの記事だったら、リンクを表示
resources/views/show.blade.phpの編集 - アクセス制御について
- 実際にアプリケーションを公開する際には、これだけではアクセス制御が不十分なので注意。
- Laravel5.7: 認可 (記事の編集はオーナーに限る、などの制限) - Qiita
https://qiita.com/sutara79/items/11d8417a6fc91ca1b841 - - 認可 5.7 Laravel
https://readouble.com/laravel/5.7/ja/authorization.html
#09:セッションとパスワードを理解しよう
- セッションとは
ログインしてから、ログアウトするまでの一連のアクセスを「セッション」と呼ぶ。 - セッションを確認する手順
- Google Chromeの場合
1.「設定」メニューを呼び出す
2.「詳細設定」-「コンテンツの設定」-「Coookies」-「すべてのクッキーとサイトデータ」
3.Webアプリケーションのドメイン名を検索する
- Google Chromeの場合
- パスワードの暗号化について
Laravelでは、パスワードを「ハッシュ」という暗号に変換して保存している。
認定証
このレッスンは、チャプター8終了時点で認定証がもらえた。
どうやらこのレッスン終了で、レッスン完了数がちょうど100になったみたい。
残りは51レッスンだけど、契約満了の3月末までにすべて終われるだろうか?
※コメント投稿者のブログIDはブログ作成者のみに通知されます