質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.44%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

1回答

2291閲覧

Laravel ダイレクトアクセス禁止

nyt

総合スコア2

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

1クリップ

投稿2023/05/30 07:51

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • Laravelを使用して選手詳細画面にダイレクトアクセスされた際は選手一覧画面に遷移するようにする。

前提

ここに質問の内容を詳しく書いてください。
(例)
Laravelを使用した選手一覧の画面を作成しており、選手一覧の詳細画面に直接アクセスした場合は選手一覧の画面に移動させたいのですが、以下の方法を試してもうまくいきません。まだLaravelの知識が浅く、ところどころ理解が及んでいない可能性があるため、もしよろしければ、どうすればダイレクトアクセスした際に遷移させるのか教えていただけないでしょうか。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

PlayersController.php public function show($id){ $player = Player::find($id); if (is_null($player)){ return redirect(route('index')); } return view('players.detail', ['player' => $player]); } web.php Route::get('/', [PlayersController::class, 'index'])->name('index'); 選手一覧画面 Route::get('/show/{id}', [PlayersController::class, 'show'])->name('players.detail'); 詳細画面 detail.blade.php <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> 選手詳細</title> <link rel="stylesheet" type="text/css" href="/css/base.css"> </head> <body class=del> <h1>■選手データ</h1> <table> <tr> <td>No</td> <td>{{ $player->id }}</td> </tr> <tr> <td>背番号</td> <td>{{ $player->uniform_num }}</td> </tr> <tr> <td>ポジション</td> <td>{{ $player->position }}</td> </tr> <tr> <td>所属</td> <td>{{ $player->club }}</td> </tr> <tr> <td>名前</td> <td>{{ $player->name }}</td> </tr> <tr> <td>誕生日</td> <td>{{ $player->birth }}</td> </tr> <tr> <td>身長</td> <td>{{ $player->height }}</td> </tr> <tr> <td>体重</td> <td>{{ $player->weight }}</td> </tr> </table> <p class="top-back"><a href="route('index')" >戻る</a><p> </body> </html>

試したこと

web.phpに
Route::get('/show/{id}', function () {return redirect(route('index'));});を追加

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AbeTakashi

2023/05/30 10:35 編集

> 以下の方法を試してもうまくいきません。 「うまくいきません」とは具体的にどういう状態なのか? エラーが出るのか、それとも意図した挙動にならないのか? エラーが出てるならエラーメッセージなどを質問文に追記してください。意図した挙動にならないのなら、もう少し詳細に現状の挙動を含めて説明してください。「ダイレクトアクセス禁止」を目指してるようですが、であれば第三者から見るとソースコードの意味がよく分かりません(試したことのソースコードをみるに、そんな処理を入れたらどうやっても詳細画面にアクセスできない気がしますが)。質問文を追記・編集していただき、第三者にも伝わる内容にするといいと思います。
nyt

2023/05/30 10:41

ご指摘ありがとうございます。 うまくいかないというのは、試したソースコードを入力した際にかえって詳細画面にアクセスができなくなってしまいました。 ソースコードの記載に関しては後日再度編集いたします。
guest

回答1

0

ベストアンサー

具体的な手法がまったく想像が付かないレベルという状況でそのようなソースコードになったと思いますが、Laravelに不特定多数ユーザの直アクセス禁止をする機能はないと思います(ユーザ認証ありきならGateとかPolicyが使えると思いますが)ので、PHPの一般的な技法を用いる必要があるかと思います。

1).htaccess を利用する

参考)
https://info-con.co.jp/tips/htaccess-01-access_referer/

2)リファラー を利用する

参考)
https://www.yamata-pgblog.com/entry/2020/10/30/214213

3)セッションを利用する

参考)
https://sys-guard.com/post-14594/
(セッションはLaravelに実装されるセッションを使うと少し楽できる)

どれも一長一短があり、中には直アクセスを完全に防げないのもあるかと思います(リファラーは偽装可能だったりとか)。ただ、これらの技術は組み合わせて実装することも可能ですので、サーバの環境とご自身のスキルを検案してこれらの中から選択されるといいかと思います。

投稿2023/05/30 11:50

AbeTakashi

総合スコア4681

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nyt

2023/05/30 14:28

ありがとうございます。参考にさせていただきます。
nyt

2023/05/31 02:17

参考として載せていただいたセッションを利用して、なんとか解決することができました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.44%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問