2013-10-28 40 views
0

我想做一个身份验证系统,我遇到的唯一问题是如果使用了错误的creds,它不会显示错误。它显示错误时,其中一个领域是空的,但不是当他们都充满了错误的信息。有人能帮我弄清楚什么是错的?感谢所有的帮助!Laravel 4错误通过不起作用

这是我的看法

{{ Form::open([ 
     "route"=>"user/login", 
     "autocomplete"=>"off" 
    ]) }} 

     {{ Form::label("username", "Username") }} 
     {{ Form::text("username", Input::old("username"), [ 
      "placeholder"=>"Username" 
     ]) }} 

     {{ Form::label("password", "Password") }} 
     {{ Form::password("password", [ 
      "placeholder"=>"Password" 
     ]) }} 

     @if($error = $errors->first("password")) 
      <div class="error"> 
       {{ $error }} 
      </div> 
     @endif 

     {{ Form::submit("Login") }} 

    {{ Form::close() }} 

这里是控制器

<?php 

use Illuminate\Support\MessageBag; 

class UserController extends BaseController 
{ 
    public function loginAction() 
    { 
     $errors = new MessageBag(); 

     if($old = Input::old("errors")) { 
      $errors = $old; 
     } 

     $data = [ 
      "errors"=>$errors 
     ]; 

     if(Input::server("REQUEST_METHOD") == "POST") { 
      $validator = Validator::make(Input::all(), [ 
       "username"=>"required", 
       "password"=>"required" 
      ]); 

      if($validator->passes()) { 
       $credentials = [ 
        "username"=>Input::get("username"), 
        "password"=>Input::get("password") 
       ]; 

       if(Auth::attempt($credentials)) { 
        //return Redirect::route("user/login"); 
        echo "login success"; 
       } 
      } else { 
       echo "Login failed"; 
       $data["errors"] = new MessageBag([ 
        "password"=>[ 
         "Username and/or password invalid." 
        ] 
       ]); 
       $data["username"] = Input::get("username"); 

       return Redirect::route("user/login") 
        ->withInput($data); 
      } 
     } 

     return View::make("user/login", $data); 
    } 
} 

回答

0

看起来你如果认证失败不显示任何信息。 Auth :: attempt()会尝试匹配用户名和密码,如果失败,它应该向errors数组添加内容。

if(Auth::attempt($credentials)) { 
     //return Redirect::route("user/login"); 
     echo "login success"; 
    } 
else // add this 
{ 
    echo 'login failed - username and/or password provided are not correct'; 
} 

也就是说,您可能需要在此处添加else声明。

+0

就是这样!这样做后,我还必须在'validator passes'条件末尾添加另一个'else'来解决空字段的问题。谢谢您的帮助! – zachstarnes