54
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Laravel5.7: ログイン機能を追加する

001.png

親記事

Laravel 5.7で基本的なCRUDを作る - Qiita

認証の機能を一括して導入する

:link: readouble.com: 認証

以前の記事で下記を既に実行している場合は不要です。

PowerShell
> php artisan make:auth

上のコマンドで以下のことが起こります。

  • resources/views/home.blade.php生成
  • resources/views/auth/内に複数のビューを生成
  • resources/views/layouts/app.blade.php生成
  • app/Http/Controllers/HomeController.php生成
  • app/Http/Controllers/Auth/内に複数のコントローラを生成
  • routes/web.php内にルートを追加

ビューを修正する

生成したビューはほぼそのままで使えるのですが、レイアウトの指定などの細かな修正が必要です。
下記のリンク先の内容に丸ごと入れ替えてください。

:page_facing_up: resources/views/auth/

コントローラを修正する

:link: readouble.com: パスのカスタマイズ

ログインした後は/homeではなくトップページ(/)にリダイレクトするようにします。
下記のLoginコントローラだけでなく、RegisterResetPasswordVerificationコントローラでも同様に修正してください。

app/Http/Controllers/Auth/LoginController.php
-    protected $redirectTo = '/home';
+    protected $redirectTo = '/';

また、RedirectIfAuthenticatedミドルウェアも修正が必要です。
これを忘れてログインした状態で/loginへアクセスすると、/homeへリダイレクトしてしまいます。
:link: 404.blade.php page user logged in issue

app/Http/Middleware/RedirectIfAuthenticated.php
         if (Auth::guard($guard)->check()) {
-            return redirect('/home');
+            return redirect('/');
         }

以上で、ユーザー登録とログイン・ログアウトができるようになりました。
ユーザー登録で入力したメールアドレスへの確認用のメール送信や、パスワード再設定用のメール送信はまだできません。

なお、レイアウトにmy.blade.phpを指定しているはずなのにヘッダーが黒くならない場合は、php artisan view:clearのコマンドでキャッシュを削除してみてください。
:link: キャッシュや古いデータを削除したい

記事の投稿、編集、削除は認証を必須とする

:link: readouble.com: コントローラーミドルウェア

UserControllerPostController__construct()メソッドを追加します。
ログインしなくても閲覧だけはできるように、except()で指定します。

UserとPostコントローラ
class PostController extends Controller
{
    /**
     * 各アクションの前に実行させるミドルウェア
     */
    public function __construct()
    {
        $this->middleware('auth')->except(['index', 'show']);
    }

これで、ログアウトした状態でNew Postをクリックすると、記事の投稿の前にまずはログインするように促されます。
002.png

記事作成時に著者のIDを保存する

以前の記事でpostsとusersテーブルを関連させた時は、ログイン機能がなかったので著者のIDを1で固定して保存するようにしていました。
これを修正します。
:link: readouble.com: 認証済みユーザーの取得

app/Http/Controllers/PostController.php
     public function store(StorePost $request)
     {
         $post = new Post;
         $post->title = $request->title;
         $post->body = $request->body;
+        $post->user_id = $request->user()->id;
         $post->save();
         return redirect('posts/'.$post->id);
     }
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
54
Help us understand the problem. What are the problem?