2

Redirect::intended()ログイン後にメソッドを使用している場合、何らかの理由で理解できませんfournisseurs/ax_getListProduits.2つの例外を除いて、実際に意図したURLが何であれ、常にroutesファイルのURLに送信されます。

  • fournisseurs/ax_getListProduitspostルートを削除すれば、すべて問題ありません
  • ログイン ページが表示される前にエコーSession::get('url.intended');コールを追加すると、意図した正しい URL が表示され、機能します (ただし、このコードを の後に追加するとAuth::attempt、 に送信されfournisseurs/ax_getListProduitsます)。

何が起こっているのか理解できません…ここでもLaravel Githubリポジトリでも同様の問題が見つかりません。これにより、何か間違ったことをしていると思いますが、見つかりません…この質問をGithub でバグの可能性がありますが、成功しませんでした: https://github.com/laravel/framework/issues/2668

以下は、ルート ファイルとログイン コントローラー コードです。

ルート.php

Route::group(array('before' => 'auth'), function() {
  Route::get('/', array("as"=>"home", function() {
    return Redirect::to("fournisseurs");
  }));
  Route::resource('usergroups', 'UsergroupsController');
  Route::get('fournisseurs/ax_produits', 'FournisseursController@ax_produits');
  Route::post('fournisseurs/ax_getProduit', 'FournisseursController@ax_getProduit');
  Route::post('fournisseurs/ax_updProduit', 'FournisseursController@ax_updProduit');
  Route::post('fournisseurs/ax_getListProduits', 'FournisseursController@ax_getListProduits');
  Route::resource('fournisseurs', 'FournisseursController');

  Route::resource('adresses', 'AdressesController', array('only' => array('store', 'destroy', 'edit', 'update')));
  Route::get('/adresses/create/{frs_id}', array('as'=>'adresses.create', 'uses'=>'AdressesController@create'));

  Route::resource('contacts', 'ContactsController', array('only' => array('store', 'destroy', 'edit', 'update')));
  Route::get('/contacts/create/{frs_id}', array('as'=>'contacts.create', 'uses'=>'ContactsController@create'));
});

Route::get('login', array('as' => 'login', 'uses' => 'SessionsController@create'));
Route::get('logout', array('as' => 'logout', 'uses' => 'SessionsController@destroy'));
Route::resource('sessions', 'SessionsController', array('only' => array('create', 'store', 'destroy')));

ログイン コントローラ:

class SessionsController extends BaseController {

public function create() {
    // if I uncomment the following line, everything is OK
    //  echo Session::get('url.intended');
    return View::make('sessions.create');
}

public function store() {
    $input = Input::all();

    $attempt = Auth::attempt(array(
        "nom" => $input["nom"],
        "password" => $input["password"]
    ));

    if($attempt) return Redirect::intended("/");

    return Redirect::back()->with("flash_error", "Nom ou mot de passe invalide")->withInput();
}

public function destroy() {
    Auth::logout();
    return Redirect::home();
}

}

create.blade を表示

@extends("layouts.default")
@section("content")

<div class="login_form">

<div class="row"><div class="col-md-4 col-md-offset-4">
  <h2>Identification</h2>
</div></div>

<div class="row">
  <div class="col-md-4 col-md-offset-4">
    {{ Form::open(array('route' => 'sessions.store', 'class' => 'form', 'role' => 'form')) }}
      <div class="form-group">
        {{ Form::label('nom', 'Nom') }}
        {{ Form::text('nom', '', array('autocomplete'=>'off', 'class' => 'form-control')) }}
      </div>
      <div class="form-group">
        {{ Form::label('password', 'Mot de passe') }}
        {{ Form::password('password', array('autocomplete'=>'off', 'class' => 'form-control')) }}
      </div>
      {{ Form::submit("Connexion", array("class"=>"btn btn-primary")) }}
      {{ Form::close() }}
    </div>
  </div>

</div>

@stop

そして default.blade レイアウト

<!DOCTYPE html>
<html lang="fr">
<head>
    (...) head removed for code clarity
</head>
<body>
    <div class="container">

        @if(Session::get("flash_msg"))
            <div class="row fox-info"><div class="col-md-12">
                <div class="alert alert-info">
                    {{ Session::get("flash_msg") }}
                </div>
            </div></div>
        @endif

        <nav class="navbar navbar-default" role="navigation">
            <a class="navbar-brand" href="#">EK | FOX</a>

            <ul class="nav navbar-nav">
                @yield("trail")
            </ul>

            <ul class="nav navbar-nav navbar-right">
                @if(Auth::user())
                <li class="dropdown">
                    <a href="#" data-toggle="dropdown">{{ Auth::user()->nom }} <b class="caret"></b></a>
                    <ul class="dropdown-menu">
                        <li><a href="{{ route('logout') }}">Déconnexion</a></li>
                    </ul>
                </li>
                @endif
            </ul>
        </nav>

        @if(Session::get("flash_error"))
            <div class="row"><div class="col-md-12">
                <div class="alert alert-danger">
                    {{ Session::get("flash_error") }}
                </div>
            </div></div>
        @endif

        @yield("content")
    </div>

    (...) js scripts removed for code clarity

</body>
</html>
4

1 に答える 1

1

この問題に対処する時間を見つけましたが、この問題は、「不要なルート」への不幸な ajax post 呼び出しから発生しました ( fournisseurs/ax_getListProduits)。この ajax 呼び出しはページ作成に行われ、404 エラーが返されたとしても、Laravel はurl.intendedページ作成とフォーム送信の間に Session 変数を更新していました。

于 2013-11-14T07:40:30.193 に答える