2016-01-26 19 views
5

laravel new MyAppを使用して新しいLaravel 5.2プロジェクトを開始し、php artisan make:authで認証を追加しました。これは、最初のユーザーがシードされたメンバーのみのWebサイトであり、残りのユーザーが作成されます(手動によるユーザー作成/パスワードのリセットなどはありません)。Laravel予期しないリダイレクト(302)

これらは私が現在定義されているルートです:

Route::group(['middleware' => 'web'], function() { 
    // Authentication Routes... 
    Route::get('user/login', ['as' => 'user.login',  'uses' => 'Auth\[email protected]']); 
    Route::post('user/login', ['as' => 'user.doLogin', 'uses' => 'Auth\[email protected]'  ]); 

    Route::group(['middleware' => 'auth'], function() { 
    // Authenticated user routes 
    Route::get('/', ['as'=>'home', 'uses'=> '[email protected]']); 
    Route::get('user/{uid?}', ['as' => 'user.profile', 'uses' => 'Auth\[email protected]' ]); 
    Route::get('user/logout', ['as' => 'user.logout', 'uses' => 'Auth\[email protected]' ]); 
    Route::get('/user/add', ['as' => 'user.add',  'uses' => 'Auth\[email protected]']); 

    [...] 
    }); 
}); 

私はしかし、私はいくつかの非常に「ファンキー」行動を経験してる、うまくログインすることができます - 私はログアウトしようとすると、(ビルトインlogout経由方法は、職人によって作成された)、ページは、302リダイレクトを家に帰し、私はまだログインしています。

さらに、ほぼすべてのページ(ここに記載されていない)は期待どおりに動作しますが、user.addは302をホームページに追加する。それは私がdebugbar経由でリダイレクトを知ったに違い

を行った場合、ホームページは、$redirectToとしてAuthControllerに宣言されている

に注意してください。何を探したらいいですか?

答えて

3

数時間の髪を引っ張ってから、私は自分の答えを見つけました。そして、それは愚かです。

問題は、ルートuser.profileパスuser/{uid?}を有し、それはパスとしてuser/logoutuser/addの両方と一致していることです。

これは他のものより前であり、正規表現などを持たないため、ルートを処理しました。

私はまだ302がそのページに対して生成された理由を知っているが、AuthControllerから出てUserControllerにそれを移動することがわかっていない(それは最初からあるべき場所)の挙動を修正。

このように、私の(改正及び作業)ルートは今では次のようになります。

Route::group(['middleware' => 'web'], function() { 
    // Authentication Routes... 
    Route::get('user/login', ['as' => 'user.login',  'uses' => 'Auth\[email protected]']); 
    Route::post('user/login', ['as' => 'user.doLogin', 'uses' => 'Auth\[email protected]'  ]); 

    Route::group(['middleware' => 'auth'], function() { 
    // Authenticated user routes 
    Route::get('/',  ['as'=>'home', 'uses'=> '[email protected]']); 
    Route::get('/home', ['as'=>'home', 'uses'=> '[email protected]']); 
    Route::get('user/logout', ['as' => 'user.logout', 'uses' => 'Auth\AuthCon[email protected]' ]); 

    // *** Added /profile/ here to prevent matching with other routes **** 
    Route::get('user/profile/{uid?}', ['as' => 'user.profile', 'uses' => '[email protected]' ]); 
    Route::get('/user/add',   ['as' => 'user.add',  'uses' => '[email protected]']); 

    [...] 
    }); 
}); 
+0

私もAuthControllerから機能を削除しました。問題。.. –

+0

+1私は午後同じような問題で髪を裂いてきた。 –

1

ログアウト後のデフォルトのリダイレクトページはhomeで、webルートにはhomeがないようです。これは、ログアウト後にloginページにリダイレクトされますあなたのAuthController.php

use AuthenticatesAndRegistersUsers, ThrottlesLogins; // after this line 
$redirectAfterLogout = 'login' // add this line 

に以下のコードを試してみてください。必要に応じて任意のルートに変更することができます。私は一例としてloginを使用しました。

OR

あなたは、私がloginにデフォルトルートを変更し\vendor\laravel\framework\src\Illuminate\Foundation\Auth\AuthenticatesUsers.php

public function logout() 
    { 
     Auth::logout(); 

     return redirect(property_exists($this, 'redirectAfterLogout') ? $this->redirectAfterLogout : 'login'); 
    } 

にログアウトルートの後に変更することができます。 AuthController.php$redirectAfterLogoutがない場合は、ここにリダイレクトパスが表示されます。ここで編集する人はいないと思いますが、これは難しいコーディングです。

+0

'Route :: get( '/'、 '' '=' 'HomeController @ index']);'これは 'home'ルートですが、ログインしていなければアクセスしてください。正しいですが、 'logout'の' redirect'はデフォルトで 'login'ページに戻るべきです。 –

+0

上記のように、 'home'はルートの名前です - そして、私は、リクエストが' AuthController @ logout'に行き、 'HomeController @ index'にリダイレクトされることを確信します – hexblot

3

私は302で問題が発生したAJAXリクエストを投稿する際にリダイレクトします。この場合の解決策は、CSRFトークンを含めることでした。

ここLaravel 5.4のドキュメントを参照してください:https://laravel.com/docs/5.4/csrf

+0

私はまた、いくつかのデータを検証しているAjaxリクエスト中にこの問題を抱えていました。検証するフィールドがフォームのフィールドと一致しませんでした。 – Raccoon

0

私はこの問題を持っていたし、それは私がルートを持っていたが判明:私のAjaxのコントローラ内部でリダイレクトします。明らかに私たちはajaxを返さなければならないので意味がありませんが、私はルートを返すことになっています!

関連する問題