2014-12-11 5 views
1

Я использую laravel framework с тех пор, как через несколько недель, и я создаю сайт litle с ним.routing url rewrite with laravel 4

На данный момент, у меня есть:

  1. индексная страница, которая отображения формы Войти
  2. индекс/аутентификации страницу, проверки подлинности пользователя, но не отображает вид и перенаправлять пользователь либо на следующей странице или первой странице индекса
  3. страница, которая Dislay список пациента, если пользователь вошел в

Вот моя проблема. Моя аутентификация работает хорошо, но когда я перенаправляю пользователя на страницу списка пациентов, URL-адрес становится «index/auth».

Мой файл маршрут выглядит следующим образом:

Route::get('index', array('as'=>'index', 'uses'=>'[email protected]')); 

Route::post('index/auth', array('uses'=>'[email protected]')); 

Route::get('patients', array('as'=>'patients', 'uses'=>'[email protected]')); 

Мои 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> 

@ стоп

, и это мой PatientsController:

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 недели я на эту проблему сейчас, я не могу продолжать работать на моем сайте, пока эта проблема решена.

Если у вас есть какие-либо вопросы, не стесняйтесь, и спасибо за вашу помощь.

ответ

0

Я подозреваю, что метод 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 имеет Authentication построена так что вы могли бы просто использовать это. И вы, вероятно, хотите использовать что-то более сильное, чем MD5 для паролей.

+0

Благодарим вас за эту оптимизацию, моя аутентификация все еще работает (и выглядит лучше). Я знаю, что это не очень хорошая практика, и я знаю, что есть метод Auth, который я могу использовать с laravel, но у меня есть конкретная база данных, которая используется в производстве и не соответствует именам таблиц драйверов laravel ... (я работая над этим) Итак, я изменил то, что вы предоставили, но URL-адрес остался неизменным до «index/auth» вместо «пациентов» после перенаправления пользователя. –

+0

Из кода видно, что он должен работать, добавляя некоторую отладку, когда вы устанавливаете сеанс, когда пользователь выполнил вход в систему правильно. Если это работает и корректно выводится, добавьте некоторые действия в действие в контроллере ваших пациентов, чтобы узнать, будет ли это выводиться. – Varedis

+0

Ну, я могу сказать, что это работает, если я использую правильную электронную почту и пароль, я перенаправляюсь на страницу пациентов, но URL-адрес «index/auth» вместо «пациентов». Но это работает. И, например, если я предоставляю неверную информацию, когда я вхожу в систему, я остаюсь на странице формы, но URL-адрес «index/auth» вместо «index». –

0

Поскольку я тестировал вещи, чтобы узнать, что было моей ошибкой, я понял, что на моей индексной странице, отображающей форму, у меня есть две ссылки на «включает» 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-файла.

+0

Хорошо, я нашел решение. Это было из-за аякс-запросов. Он загружает содержимое страницы на этой же странице, чтобы избежать обновления, и поэтому он будет делать это после моей аутентификации, поэтому URL-адрес остался неизменным для «index/auth» вместо «пациентов». Спасибо за вашу помощь –