2015-12-04 3 views
1

Ну, после того, как Validate, если мой password длиннее 3-х символов я получаю эту ошибку:Laravel - Получение ошибки после postLogin проверки

Argument 1 passed to Illuminate\Http\RedirectResponse::withInput() must be of the type array, object given, called in /home/vagrant/Code/stack-laravel/app/Http/Controllers/Admin/AuthController.php on line 50 and defined

И это мой AuthController:

<?php 

namespace App\Http\Controllers\Admin; 

use App\User; 
use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Auth; 
use Validator; 
use App\Http\Controllers\Controller; 
use Illuminate\Foundation\Auth\ThrottlesLogins; 
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers; 

class AuthController extends Controller 
{ 
    use AuthenticatesAndRegistersUsers, ThrottlesLogins; 

    protected $redirectPath = '/admin'; 

    public $loginPath = '/admin'; 

    public function __construct() 
    { 
     $this->middleware('guest', ['except' => 'getLogout']); 
    } 

    public function getLogin() 
    { 
     if (Auth::user()){ 
      return redirect('/admin'); 
     } 

     return view('admin.pages.login.index'); 

    } 

    public function postLogin(Request $request) 
    { 
     $this->validate($request, [ 
      'email' => 'required|email', 
      'password' => 'required|min:3' 
     ]); 

     $credentials = $this->getCredentials($request); 

     if (Auth::attempt($credentials, $request->has('remember'))) { 
      return redirect()->intended($this->redirectPath()); 
     } 

     return redirect($this->loginPath()) 
      ->withInput($request) 
      ->withErrors(); 
    } 
} 

Что не так?

ответ

1

$request - это объект, а withInput() берет массив входов для передачи. Для того, чтобы получить массив из ваших входов запроса вы могли бы сделать

return redirect($this->loginPath()) 
     ->withInput($request->all()) 
     ->withErrors(); 

Вы также можете позвонить withInput() без каких-либо аргументов, и по умолчанию он будет посылать все входы вместе:

return redirect($this->loginPath()) 
     ->withInput() 
     ->withErrors(); 

В этще случай, вероятно, вы не хотите, чтобы передать поле ввода пароля обратно (потому что они ввели неправильный пароль, предположительно, или в целях безопасности), чтобы вы могли использовать $request->except() метод:

return redirect($this->loginPath()) 
     ->withInput($request->except('password')) 
     ->withErrors(); 

Редактировать: как для второй ошибки, вам не нужно использовать withErrors(), когда вы используете метод $this->validate() для проверки ввода. См. Здесь: http://laravel.com/docs/5.0/validation#controller-validation. При проверке контроллера они автоматически будут перенаправлены функцией $this->validate(). Вместо этого, вы можете установить свой код вот так:

public function postLogin(Request $request) 
{ 

    //Validate inputs 

    $validator = Validator::make($request->all(), [ 
     'email' => 'required|email', 
     'password' => 'required|min:3' 
    ]); 

    if($validator->fails()){ 
     return redirect($this->loginPath()) 
      ->withInput($request->all()) 
      ->withErrors($validator); 
    } 

    //Input is valid, now check credentials 

    $credentials = $this->getCredentials($request); 

    if (Auth::attempt($credentials, $request->has('remember'))) { 
     return redirect()->intended($this->redirectPath()); 
    } 

    //Username and password are incorrect, redirect with error message 

    return redirect($this->loginPath()) 
      ->withInput($request->all()) 
      ->with('error','Your username and password are not correct'); 

} 

Наконец вы хотите отобразить сообщение об ошибке на ваш взгляд входа:

@if (session('error')) 
    <div class="alert alert-danger"> 
     {{ session('error') }} 
    </div> 
@endif 
+0

Работает, но теперь ошибка с 'withErrors()', это происходит: 'Отсутствует аргумент 1 для Illuminate \ Http \ RedirectResponse :: сErrors(), вызываемый в/home/vagrant/Code/stack-laravel/app/Http/Controllers /Admin/AuthController.php в строке 51 и определяется ' –

+0

@CaioKawasaki см. Правки выше – Jeff

+0

с вашим 'postLogin()', если мой пароль больше 3 символов, и реальному электронному письму присваивается пустая страница. –

0

Вы должны использовать это:

return redirect($this->loginPath()) 
     ->withInput($validator) 
     ->with('error','write here your error message'); 
Смежные вопросы