使用 Laravel 4 重写路由 URL


routing url rewrite with laravel 4

我从几周开始就使用laravel框架,我正在用它建立一个轻松的网站。

目前,我有:

  1. 显示登录表单的索引页
  2. 验证用户身份验证的索引
  3. /身份验证页面,但不显示任何视图并在下一页或第一个索引页上重定向用户
  4. 如果用户登录,则显示患者列表的页面

这是我的问题。我的身份验证效果很好,但是当我将用户重定向到患者列表页面时,URL 变为"索引/身份验证"。

我的路由文件如下所示:

Route::get('index', array('as'=>'index', 'uses'=>'WUsersController@getIndex'));
Route::post('index/auth', array('uses'=>'WUsersController@postAuth'));
Route::get('patients', array('as'=>'patients', 'uses'=>'PatientsController@getPatientList'));

我的 WUsersController 看起来像 :

    public function getIndex() {
    return View::make('wusers.index')
        ->with('title', 'Instant Access');
}
public function postAuth() {
    $rules = array(
            'email'=>'required|email',
            'password'=>'required|alphaNum|min:4'
    );
    $validator = Validator::make(Input::all(), $rules);
    $user = WUserModel::where('WUS_EMAIL', '=', Input::get('email'))->first();
    if ($validator->fails()) {
        return Redirect::route('index')
            ->withErrors($validator);
    }
    if ($user->WUS_PASSWORD == md5(Input::get('password'))) {
        Session::put('login', $user->WUS_EMAIL);
            return Redirect::route('patients')
                ->with('title', 'Patient List');
        }   
    return Redirect::route('index')
        ->with('logError', 'login ou mot de passe incorrect');
}

这是"wusers.index"视图,其形式为:

@section('content')
<div id="loginPage" data-role="page">
    <div data-role="header">
        <h1>InstantAccess</h1>
    </div>
    <div data-role="content" style="text-align:center">
        {{ HTML::image('img/logo_keosys.png') }}
            {{ Form::open(array('url'=>'index/auth', 'method'=>'POST', 'id'=>'loginForm')) }}
            <p>
                {{ $errors->first('email') }}
                {{ $errors->first('password') }}
            </p>
            <div data-role="fieldcontain">
            <p>
                {{ Form::label('email', 'Email:') }}<br />
                {{ Form::text('email') }}
            </p>
            <p>
                {{ Form::label('passorwd', 'Password:') }}<br />
                {{ Form::password('password') }}
            </p>
             </div> 
            <p>{{ Form::submit('Sign in', array('name'=>'login', 'value'=>'Valider')) }}</p>
            @if (Session::has('logError'))
                <p style="color: red;">{{ Session::get('logError') }}</p>
            @endif
            {{ Form::close() }}
    </div>
</div>

@stop

这是我的患者控制器:

    public function getPatientList() {
        return View::make('patients.index', array(
            'title'=>'Patients List',
            'patients'=>DB::table('patient')
                ->join('study', 'patient.pat_id', '=', 'study.sty_pat_id')
                ->select('patient.pat_id', 'patient.pat_name', 'patient.pat_nip', 'patient.pat_birthdate', 'patient.pat_sex', 'study.sty_description', 'study.sty_datetime')
                ->orderBy('study.sty_datetime', 'desc')->take(10)->get())
            );
}

我已经 2 周了,我现在遇到了这个问题,在这个问题得到解决之前,我无法继续在我的网站上工作。

如果您有任何问题,请不要犹豫,并感谢您的帮助。

我怀疑 postAuth 方法是您的问题,原因如下:

  • 您似乎每次登录都会从模型中取出两个用户数组
  • 一个数组的电子邮件地址等于您输入的电子邮件地址,这不是唯一的吗?如果是这样,您可以只获得第一条记录而不是所有记录
  • 另一个数组是具有相同密码的用户数组。这似乎是非常糟糕的做法。

相反,您应该做的是通过电子邮件地址获取一个唯一的用户对象,并检查其密码是否与提供的密码匹配并相应地重定向

public function postAuth() {
    $rules = array(
        'email'=>'required|email',
        'password'=>'required|alphaNum|min:4'
    );
    $validator = Validator::make(Input::all(), $rules);
    // Early dropout if we have an invalid email
    if ($validator->fails()) {
        return Redirect::route('index')
            ->withErrors($validator);
    }
    $user = WUserModel::where('WUS_EMAIL', '=', Input::get('email'))->first();
    if($user->WUS_PASSWORD == md5(Input::get('password'))) {
        Session::put('login', $user->WUS_EMAIL);
        return Redirect::to('patients')
            ->with('title', 'Patient List');**
    }
    return Redirect::route('index')
        ->with('logError', 'login ou mot de passe incorrect');
}

作为旁白,Laravel内置了身份验证,因此您可以使用它。您可能希望使用比MD5更强的密码。

当我测试东西以找出我的错误时,我意识到,在显示表单的索引页面上,我有两个指向"包含"jquery和jquery-mobile的链接。

它看起来像:

@section('header')
    <meta charset="utf-8">
    <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
    <meta name="viewport" content="width=device-width,initial-scale=1"/>
    {{ HTML::style('css/jquery.mobile-1.3.0.min.css') }}
    {{ HTML::script('js/jquery-1.9.1.min.js') }}
    {{ HTML::script('js/jquery.mobile-1.3.0.min.js') }}
@stop

因此,当我删除这两个.js链接之一时,我丢失了表单的图形方面,但 url 被正确重写......

我不明白,但问题似乎来自那些.js文件。