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

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

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

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

解決済

4回答

5416閲覧

Laravelで認証が無くてもアクセスできるページの追加方法を教えてください。

Yuu412

総合スコア37

Laravel

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

0グッド

0クリップ

投稿2020/08/31 19:33

編集2020/09/01 05:12

web.php

1Auth::routes(); //認証機能を使用する。

この記載がある場合、どこのページにアクセスしてもログインしてなかったら、ログイン画面が表示される仕様となっていると思います。

しかし、現在実装したいこととして、ある特定のページには、ログインなしでアクセスできるようにしたいです。

そういった実装方法はございますでしょうか。

ご回答よろしくお願いいたします。

web.php

1<?php 2 3use App\Laboratory; 4use Illuminate\Http\Request; 5 6Auth::routes(); //認証機能を使用する。 7 8Route::get('register/verify/{token}', 'Auth\RegisterController@showForm'); 9 10Route::post('register/main_check', 'Auth\RegisterController@mainCheck')->name('register.main.check'); 11Route::post('register/main_register', 'Auth\RegisterController@mainRegister')->name('register.main.registered'); 12 13Route::get('/home', 'LabController@index')->name('home'); 14 15Route::get('/review/{token}', 'LinkController@qr_to_add'); 16 17Route::group(['middleware' => ['web']], function () 18{ 19 20Route::post('register/pre_check', 'Auth\RegisterController@pre_check')->name('register.pre_check'); 21 22Route::get('/', 'LabController@index'); 23Route::post('/', 'LabController@index'); 24 25Route::get('/search_result', 'LabController@search'); 26 27Route::get('/area/{pre_name}','LabController@area_search'); 28 29Route::get('/faculty_result/{faculty}', 'LabController@faculty_result'); 30 31Route::post('/laboratories', 'LabController@store'); 32 33Route::post('/add/2', 'LabController@ret_univ'); 34 35Route::post('/laboratory/{laboratory}', 'LabController@store_evaluation'); 36 37Route::post('/', 'LabController@mv_add'); 38 39Route::post('/labedit/{lab_evaluation_id}','LabController@mv_update'); 40 41Route::post('/mypage/update', 'LabController@update'); 42 43Route::delete('/mypage/delete/{lab_evaluation_id}', 'LabController@delete'); 44 45Route::PUT('update',[ 46 'uses' => 'UserController@update', 47 'as' => 'update' 48]); 49 50 51Route::get('/add', 'LinkController@to_add'); 52 53Route::POST('/add_evaluation', 'LabController@add_evaluation'); 54 55Route::GET('/add_evaluation', function() 56{ 57 return view('add_evaluation'); 58}); 59 60Route::get('/add_evaluation/{lab_details_univ}/{lab_details_lab}', 'LinkController@to_add_evaluation'); 61 62Route::get('/univ/{univ_name}','LinkController@to_univ'); 63 64Route::get('/lab/{lab_details_univ}/{lab_details_lab}','LinkController@to_lab_details'); 65 66Route::get('/lab-evaluation/{lab_evaluation_details}','LinkController@to_lab_evaluation_details'); 67 68Route::get('/mypage','LinkController@to_mypage'); 69 70 71Route::get('/confirm_user',[ 72 'uses' => 'UserController@confirm_user', 73 'as' => 'confirm' 74]); 75 76Route::get('/edit_user','UserController@edit_user'); 77 78 79Route::get('/scraping','ScrapingController@scraping'); 80 81});

調べたところ、こちらのサイトで

Authenticate.php

1<?php 2 3namespace App\Http\Middleware; 4 5use Illuminate\Auth\Middleware\Authenticate as Middleware; 6 7class Authenticate extends Middleware 8{ 9 /** 10 * Get the path the user should be redirected to when they are not authenticated. 11 * 12 * @param \Illuminate\Http\Request $request 13 * @return string|null 14 */ 15 protected function redirectTo($request) 16 { 17 if (! $request->expectsJson()) { 18 return route('login'); 19 } 20 } 21} 22

ここで、認証のないアカウントのリダイレクト処理が行われていると書いていました。

Auth::route()からいろいろ経由してここに飛んでくるみたいなのですが、ここでの引数($request)とは一体なにを指すのでしょうか?

もし、Authenticate.phpで

protected function redirectTo($request) { if(ある特定のパスにアクセスがあったとき){ ある特定のページにリダイレクトする。 } //それ以外は elseif (! $request->expectsJson()) { return route('login'); } }

このような形で、ある特定ページにのみ認証なしでアクセスすることは可能でしょうか。

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

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

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

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

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

guest

回答4

0

ベストアンサー

Auth::routes(); があっても、 welcome ページや、ログインページは、認証してなくてもアクセスできるじゃない?
同じようにルート定義すれば済むことじゃありませんか?

投稿2020/09/01 04:16

phper.k

総合スコア3923

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

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

Yuu412

2020/09/01 04:52

なるほど!たしかにそうですね。 /welcomeみたいな認証なしでログインできるページの追加方法教えていただけませんか?? 例:/welcomeのように/aiueoのルート定義は、認証なしでも見えるようにする
phper.k

2020/09/01 04:55 編集

routes/web.php を見ればわかるでしょ?
Yuu412

2020/09/01 05:11 編集

長くて邪魔だったので、web.phpの内容は、質問に記載しなおしました。 何処でしょうか。
phper.k

2020/09/01 05:01

自分で書いたソースじゃないのかい? ここまでかけていて今更この質問が出てくる理由がわからんのだけど。。。
Yuu412

2020/09/01 05:04

質問の編集ご確認いただけましたか?? それでも、僕の質問が意味不明なら、たぶん僕が超初歩的なところを忘れているのですね・・・ 勉強しなおします。 時間を浪費させてしまい申し訳ありませんでした。
phper.k

2020/09/01 05:07 編集

質問には答えてくれないの? あなたにとって解決方法に興味があるように、僕には、「なぜできないのか?」に興味があるんですよ。
Yuu412

2020/09/01 05:07

>>自分で書いたソースじゃないのかい? 自分で書いたソースですよ。
phper.k

2020/09/01 05:08

じゃあ、同じように書けばいいだけなんですけど。
Yuu412

2020/09/01 05:10

前提認識として、/(任意の文字列)とルート定義したときは、Auth::routes();が働いて、ログインページにリダイレクトされる。 ただし、/welcomeや/loginはログインしてなくてもアクセスできるようなルート定義になっているという認識で間違いありませんか?
phper.k

2020/09/01 05:10

そうです。
phper.k

2020/09/01 05:11 編集

php artisan route:list の結果見てもわかることでは? middleware の項目を確認すれば一目瞭然でしょう?
phper.k

2020/09/01 05:14

というか、ルート定義、ログインしてなくてもアクセスできそうだな。
Yuu412

2020/09/01 05:14

はい。私が今したいこととしては、基本的に/(任意の文字列)はログインにリダイレクトするという処理を崩さずに、/welcome、/loginと同じように、/nininomoziの場合はログインなしで見られるページを追加したいということです。 この場合、ただ/nininomoziとルート定義してしまうと、Auth::route()に引っかかってしまうので、どうしたらいいですか?との内容の質問です。
Yuu412

2020/09/01 05:18

>>というか、ルート定義、ログインしてなくてもアクセスできそうだな。 ですが、現状は/任意文字列では、ログインページにリダイレクトされてしまうんですよね・・・
phper.k

2020/09/01 05:37

> 現状は/任意文字列では、ログインページにリダイレクトされてしまうんですよね・・・ なんか変なカスタマイズしてません? ルート定義だけではそんな記述になってませんよ
Yuu412

2020/09/01 05:43

記憶の範囲では、カスタマイズしていなくて、どのページかは忘れましたが、Authで認証機能を追加するみたいなページの手順に沿って、行っただけなので、あまりAuthがどういう仕組みでどのパスをリダイレクトしているかよくわかってないんですよね・・・(今急遽勉強しています。)
phper.k

2020/09/01 05:44

Qiitaなんて参考にしちゃダメよ。 間違っている記事山ほどあるから。
Yuu412

2020/09/01 05:47

公式ドキュメントってどうしてもある程度理解できてる前提でファイルのある場所とか省略されてること多いので、Qiita参考にしまくってました。 公式ドキュメントを徹底してみようと思います・・・
guest

0

Googleでauth::routes() readouble.comを検索するとこれとかこれが見つかり、以下のような記述を見つける事が出来ます。

ルートの保護 ルートミドルウェアは特定のルートに対し、認証済みユーザーのみアクセスを許すために使われます。LaravelにはIlluminate\Auth\Middleware\Authenticateの中で定義されているauthミドルウェアが最初から用意されています。このミドルウェアは、HTTPカーネルで登録済みのため、必要なのはルート定義でこのミドルウェアを指定するだけです。 Route::get('profile', function() { // 認証済みのユーザーのみが入れる })->middleware('auth');

まずは調べ、そして試し、試した結果うまくいかなかった事を質問するとより丁寧な回答がつく事でしょう。質問内容次第では具体的なコードを回答にもらえる事もあります。

投稿2020/08/31 21:07

hentaiman

総合スコア6426

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

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

Yuu412

2020/09/01 04:11

そうですね、調べた内容も先に書くべきでした。 また、質問の内容としては、基本的に認証済みユーザーのみがアクセスできる記述があることは知っているのですが、Authを使ったうえで認証されていなくてもアクセスできるページを作りたいという意図です。 分かりにくくてすみませんが、提示されたURLには認証済みのユーザーがアクセスできるようにする方法とそのカスタマイズが書かれていたと思うのですが、僕の確認不足でしょうか。
hentaiman

2020/09/01 04:19

この回答を読んで低評価するという事は恐らく特別な設定を組まれているのでしょうね。 > 僕の確認不足でしょうか。 そう思ったからリンク載せるだけではなくわざわざ無駄な手間かけて該当箇所まで引用したわけですが、確認済みの上動作しないようなら、先に書いた通り何か特殊な設定をしているのでしょうね。
Yuu412

2020/09/01 05:02

hentaimanさんが挙げてくださった該当箇所は、「認証済みユーザーのみがアクセスできる設定」。 私は、「認証してないユーザーのみがアクセスできる設定」。 を回答として望んでおります。 認証済みユーザーがアクセスできる処理がmiddleware('auth');で行われているのでしょうが、私の希望する回答の該当箇所とはなっていないのではないでしょうか。 という意味です。
hentaiman

2020/09/01 06:23

> 「認証してないユーザーのみがアクセスできる設定」 であれば質問文にそのように記載しましょう。認証しなくてもアクセス出来るページと書いてあれば、認証済みでも認証して無くてもアクセスできるページと読み取ります。 そうなると参考にするべきマニュアルは他のページになりますが、それらは既にphper.kさんがコメントで書かれているのでそちらを確認してください。しかしphper.kさんに指摘されているように、コメントでのやり取りしている内容を見る限りはやはり特殊な設定をしているのでしょう。 まずはLaravelのマニュアルの手順通りにAuthを設定し、正常にAuthが動く状態にするのが先決かと思います。
Yuu412

2020/09/01 09:11

認証していないユーザーのみがアクセスできる設定と書きましたが、hentaimanさんの認識、そして質問文(特定のページには、ログインなしでアクセスできる)通り、認証の有無にかかわらずアクセスできる設定という認識で構いません。 >>認証しなくてもアクセス出来るページと書いてあれば、認証済みでも認証して無くてもアクセスできるページと読み取ります。 このように読み取ったのであれば、最初の回答は不適切では?? 低評価をつけさせてもらったのは、抜粋が「認証された場合のみアクセスできる設定」であったためです。ただ、私の質問文があやふやであったことも否めませんので、低評価を取り消させていただきました。失礼いたしました。
hentaiman

2020/09/01 10:30

> 不適切では?? なぜ?例にある書き方をしない場合が未認証でもアクセス出来るページと読み取れるのが普通では?
guest

0

結論としては、ルート定義で呼び出したコントローラーの先頭で、

public function __construct() { $this->middleware('auth'); }

を記載していたことが原因でした。

コントローラーを複数用意し、ひとつは認証アリで、ひとつは認証なくてもOKのように実装することで、質問文通りの実装が可能となりました。

投稿2020/09/01 09:13

Yuu412

総合スコア37

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

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

0

この記載がある場合、どこのページにアクセスしてもログインしてなかったら、ログイン画面が表示される仕様となっていると思います。

いいえ、Auth::routes()は会員登録関係のルートを追加します
ファイル中のルーティングがログイン必須にするのはまた別の処理です。

投稿2020/08/31 21:30

kyoya0819

総合スコア10429

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

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

Yuu412

2020/09/01 04:16

なるほど。ご教示ありがとうございます。 それで、ログインなしでアクセスできるページを追加するにはどうすればよいでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問