2

出于某种原因,我无法理解,当我Redirect::intended()在登录后使用该方法时,我总是被发送到fournisseurs/ax_getListProduits我的路由文件的 URL,无论我真正想要的 URL 是什么,但有 2 个例外:

  • 如果我删除发布fournisseurs/ax_getListProduits路线,一切正常
  • 如果我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 call 到“不需要的路由”(fournisseurs/ax_getListProduits)。这个 ajax 调用是在页面创建之后进行的,即使它返回 404 错误,Laravel 也会url.intended在页面创建和表单提交之间更新 Session 变量。

于 2013-11-14T07:40:30.193 回答