0
0

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 3 years have passed since last update.

【初心者奮闘録】ログイン機能をほんの少し使いこなす!(Laravel)

Posted at

#はじめに
この記事は、独学開始から約3ヶ月の実務未経験者が作成したものです。
よって、スキルは非常に未熟なため、決して本記事の内容を鵜呑みにされないよう、ご注意ください。
(未熟な私が記事投稿を行なっている背景については、本文の最後にお伝えします。)

#本日の課題
コントローラー内で、ログイン者・非ログイン者で使用できるページを任意で設定する方法について、解説いたします。

###対象者
PHP及びLaravelの基礎学習を終え、アプリ開発を始められた方
ログイン機能のダウンロードは完了したが、実用方法がわからない方

###環境
PHP 8.0.11
Laravel Framework 8.64.0

##実装解説

###ベースとなるコード
下記のコードは、app/Http/Controllersディレクトリにある、GiftController.phpです。
(GiftController.phpは私が任意で作成したファイルです。)

app/Http/Controllers/GiftController.php
<?php

class GiftController extends Controller
{

これをベースに、条件に沿って追記していきます。

###条件①;非ログイン者を寄せ付けないアプリにする

app/Http/Controllers/GiftController.php
<?php
class GiftController extends Controller
{
    public function __construct(){
        $this->middleware("auth");
    }

construct関数の中身に注目してください。
$thisを用いて、'auth'ミドルウェアが呼び出されております。
これがGiftControllerクラス内に存在することにより、GiftControllerクラス内のメソッドを使用するページは、非ログイン者は閲覧ができません。
(ただし、GiftControllerクラス内のメソッドを使用していないページには、非ログイン者でもアクセスすることは可能です。)

###条件②;非ログイン者にも優しいアプリを作る

app/Http/Controllers/GiftController.php
<?php
class GiftController extends Controller
{
    public function __construct(){
        $this->middleware("auth")->except(["index","store"]);
    }

'auth'ミドルウェアの後ろに、exceptメソッドを追記します。
これの意味は、例外としてGiftController.php内の"index"メソッドと"store"メソッドを使用しているページのみ、非ログイン者でもアクセスを可能とします。

###おまけ

上記で紹介している'auth'ミドルウェアは、一体どこから湧いて出てきたのでしょうか?

あれは、app/Httpディレクトリ内のKernel.php内に存在します。

app/Http/Kernel.php
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,

上記コードは、Kernel.php内の56行付近にあります。
しかし、この一行ではauthの働きについて読み解くことができません。
さらに、Authenticateクラスについて確認していきます。

app/Http/Middlesare/Authenticate.php
class Authenticate extends Middleware
{
    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            return route('login');
        }
    }
}

上記のコードを簡単に解説すると、非ログイン者がページにアクセスしようとした時、例外を除き、全てログインページ(≒route('login'))に飛ばすという内容です。

#最後に
上記でもお伝えいたしましたが、私は独学開始から約3ヶ月の実務未経験者です。
そんな未熟な私が記事を投稿しようと決意した理由は、以下の通りです。
・初学者の記事が多く出回るほどに、プログラミングの学習を検討している方の背中を押せると考えたから(私自身、学習を開始するまでに初学者の記事を読み漁っておりました)
・周りに同じ境遇の仲間がいない、孤独な初学者さんの競争心を掻き立てられるのではと考えたから(学習効率を上げるためにはライバルの存在は重要)
・あるいはこのような稚拙な記事を読んだ初学者さんが「自分のレベルはこいつよりも上」と優越感を与えられるのではと考えたから(学習効率を上げるためには自信を持つことも重要)

プロのエンジニア同様、初学者にもそれなりの努めがあると、私は思います。
今後も、下手くそながらも【初学者ページ】を上げ続けて参ります。

最後まで読んでいただき、誠にありがとうございました。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?