2014-08-28 55 views
-1

这是我的代码Laravel验证登录返回特定的错误

public function login_Post() 
{ 
    if (Auth::user()->attempt(array('email' => Input::get('email'), 'password' => Input::get('password'), 'active' => 1))) 
    { 
     Event::fire('users.login'); 
     return Redirect::to('/')->with('message', 'succsed'); 
    } 
    else 
     return Redirect::to('user/login')->withInput(Input::except('password')); 
} 

我想提醒用户,当他/她是不是积极主动,我怎么能undrestand激活需要或登录由错误的用户名或密码失败?

回答

2

与你已有的代码最简单的方法是先Auth::attempt(),然后检查active属性,所以你可以返回一个单独的错误。

控制器:

在错误
public function login_Post() 
{ 
    if (Auth::attempt(array('email' => Input::get('email'), 'password' => Input::get('password')))) 
    { 

     if(!Auth::user()->active) 
     { 
      Auth::logout(); 
      return Redirect::to('user/login')->with('errors', ['Your account hasn't been activated']); 

     } 

     Event::fire('users.login'); 
     return Redirect::to('/')->with('message', 'succsed'); 
    } 
    else 
     return Redirect::to('user/login')->withInput(Input::except('password'))->with('errors', ['Authentication failed.']);; 
} 

然后查看:

@if(Session::get('errors')) 

    <ul class="error"> 
     @foreach(Session::get('errors') as $message) 
      @if(is_array($message)) 
       @foreach($message as $subMessage) 
        <li>{{ $subMessage }}</li> 
       @endforeach 
      @else 
       <li>{{ $message }}</li> 
      @endif 
     @endforeach 
    </ul> 

@endif 
1

你必须检查用户是否存在第一:

if (! User::where('email', Input::get('email'))->first()) 
{ 
    return 'This user does not exists'; 
} 

然后尝试:

Auth::user()->attempt(...);