8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Laravelでスレッド型BBSをつくってみた② - ソース公開中

Last updated at Posted at 2018-12-25

はじめに

Laravelでスレッド型BBSをつくってみた①の続きです。

今回は前回作ったスレッド型BBSにユーザー認証機能をつけたいと思います。

軽く仕様策定 & 設計

  • ユーザー認証機能はLaravelの標準認証を利用します。
  • 自分の投稿のみ削除可能とします。
  • マイページは自分のスレッド/投稿の一覧が表示されることとします。

開発

まずはユーザー登録とログインできるところまで。

以下の作業はphase-2-1ブランチで行いました。

標準認証のセットアップ

標準認証のセットアップをします。artisanコマンドで簡単です。layouts/app.blade.phpを上書きするかどうか確認されるので、先に別名で保存しておいてからyesとしましょう。

$ php artisan make:auth

The [layouts/app.blade.php] view already exists. Do you want to replace it? (yes/no) [no]:

 > yes

別名で保存しておいたものと新しいlayouts/app.blade.phpの中身をガッチャンコします。(画面丈夫のナビバーだを生かしてあとは元々のレイアウトファイルと同じ形です。)

これだけでユーザー登録とログインができるようになってます。

リダイレクト先修正

登録/ログイン/パスワードリセット後のリダイレクト先をスレッド一覧ページに変更します。

App\Http\Contorollers\Auth\LoginController.php
protected $redirectTo = '/threads';
App\Http\Contorollers\Auth\RegisterController.php
protected $redirectTo = '/threads';
App\Http\Contorollers\Auth\ResetPasswordController.php
protected $redirectTo = '/threads';

ボタンなどの日本語化

一部のボタンなどが日本語化してないので日本語ファイルを作りましょう。翻訳は適当です。

resources/lang/ja.json
{
    "Name": "名前",
    "Login": "ログイン",
    "Logout": "ログアウト",
    "Register": "登録",
    "E-Mail Address": "Eメールアドレス",
    "Password": "パスワード",
    "Forgot Your Password?": "パスワードを忘れたら?",
    "Remember Me": "ログイン情報を記憶する",
    "Send Password Reset Link": "パスワードリセット用URLを送る",
    "Confirm Password": "パスワード(確認)", 
    "Verify Your Email Address": "Eメールアドレスを確認する",
    "A fresh verification link has been sent to your email address.": "あなたのEメールアドレスに新しい確認URLを送りました",
    "Before proceeding, please check your email for a verification link.": "次に進む前に、あなたのEメールアドレスをチェックしてください。",
    "If you did not receive the email": "もしあなたがメールを受け取れないのなら、",
    "click here to request another": "メールを再送信するために、ここを押して"
}

作業完了後、phase-2ブランチにマージしました。

ログインしている際の動きを追加

以下の作業はphase-2-2にて行います。

さて、ログインしている際にどういった変化が起こるかというと、

  • スレッド作成/投稿時の名前を入力しなくてよくなる。(ログインしているユーザーの名前が自動で利用される)
  • 投稿の削除が可能になる

といった感じなるかと思います。1つずつ対応していきます。

スレッド作成/投稿時の名前を入力しなくてよくなる

カラム追加

まずはスレッド/投稿とuserを結びつける必要がありますので、threadsテーブルとentriesテーブルにuser_idカラムを追加します。2018_12_25_031734_add_user_id_to_entries_tableというマイグレーションファイルを作成してマイグレーションします。

EntryモデルとUserモデルに各々のリレーションも追加します。

スレッド作成/投稿時の処理

スレッド作成/投稿の際に、ログインしていた場合にはuser_idを記録し、nameはnullにする形にします。フォーム上ではログインしてた場合には名前の入力欄は決してユーザー名を表示するようにしました。

スレッド詳細ページ=投稿一覧ページでは、user_idがあるものについてはuser_idに紐づくuserの名前を表示する形に変更します。

投稿の削除が可能になる

ThreadsControllerにdestroyEntryメソッドを追加して、ルートに追加しました。また、ミドルウェアを使って認証していないとこのメソッドにはアクセスできないようにしています。

ボタンは投稿日時の隣あたりに追加しておきました(適当)

作業完了後、phase-2ブランチにマージしました。

マイページ追加

UsersControllerと画面を作成します。表示するものは自分が作成したスレッドと投稿です。簡単。マイページへのリンクはナビバーに追加しておきました。

作業完了後、phase-2ブランチにマージしました。

とりあえず完了

ミニマムなスレッド掲示板に簡単な認証機能をつけてみたました。

作業の各工程を各ブランチに残してありますので、branch切り替えながらどんな作業しているのか確認したりしつつコードを読んでみてください。

予定

  • MultiAuth
  • EntriesControllerの追加と管理機能の追加
8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?