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

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

ただいまの
回答率

89.19%

ログイン画面へのリダイレクト

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 888

Nitta

score 87

お世話になってます。
今、認証画面の作成においてまずページ保護をかけ
その後ログイン済みならリダイレクトできるようにしたいの
ですが、リダイレクトできずプロフィール画面(user/profile)
が、そのまま表示されます。
ログイン画面にリダイレクトできるようにするには、
Authenticate.php内のコードをどのようにすれば良いか、
お教え下さい。

<やりたいこと>
プロフィール画面(user/profile)にアクセスする⇒ログインページ(user/signin)にリダイレクト
<参考サイト>
http://laraweb.net/tutorial/1901/

vendor\laravel\framework\src\Illuminate\Auth\Middleware\Authenticate.php

<?php
namespace Illuminate\Auth\Middleware;
use Closure;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Contracts\Auth\Factory as Auth;

class Authenticate
{
  protected $auth;
  public function __construct(Auth $auth)
  {
     $this->auth = $auth;    
  }

  public function handle($request, Closure $next, ...$guards)
  {  
    $this->authenticate($guards);
    return $next($request);
  }

  protected function authenticate(array $guards)
  {
    if (empty($guards)) { 
      return $this->auth->authenticate();
    }        
    foreach ($guards as $guard) {
      if ($this->auth->guard($guard)->check()) {    
        return redirect()->route('user.signin'); // ←修正            
      }
    }
    throw new AuthenticationException('Unauthenticated.', $guards);
  }
}


上記コードを下記と同じ働きにするには?

public function handle($request, Closure $next, $guard = null)
  {
   if (Auth::guard($guard)->guest()) {
    if ($request->ajax() || $request->wantsJson()) {
      return response('Unauthorized.', 401);
    } 
   else {
      return redirect()->route('user.signin'); // ←修正
    }
   } 
   return $next($request);
  }


web.php(ルーチング)

Route::group(['prefix' => 'user'], function() {

  Route::group(['middleware' => 'guest'], function(){
  //登録 
  Route::get('/signup',[
    'uses' => 'UserController@getSignup',
    'as' => 'user.signup'
  ]);
 //新規登録
  Route::post('/signup',[
    'uses' => 'UserController@postSignup',
    'as' => 'user.signup'
  ]);
 //ログイン  
  Route::get('/signin',[
  'uses' => 'UserController@getSignin',
  'as' => 'user.signin'
  ]);

  Route::post('/signin',[
  'uses' => 'UserController@postSignin',
  'as' =>  'user.signin'
  ]);

  });

 Route::group(['middleware' => 'auth'], function(){
  //ユーザープロファイル
  Route::get('/profile',[
    'uses' => 'UserController@getProfile',
    'as' => 'user.profile'
  ]);
  // ログアウト
  Route::get('/logout',[
    'uses' => 'UserController@getLogout',
    'as' => 'user.logout'
  ]);

  });

});
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • m.ts10806

    2018/08/01 10:12

    そもそもですが「app/Http/Middlewareにある」というのは何情報でしょうか。

    キャンセル

  • Nitta

    2018/08/01 10:40

    返信ありがとうございます。申し訳ありません。Illuminate/Auth/Middleware/Authenticate.phpで間違いないことがわかりましたので、少し質問内容を変える予定です。失礼しました。

    キャンセル

まだ回答がついていません

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

  • ただいまの回答率 89.19%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる