LoginSignup
46
53

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-05-30

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);
     }
46
53
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
46
53