2016-12-25 139 views
1

我困在我的项目中。我希望用户可以用电子邮件或手机号登录。这工作非常好。但现在我希望只有活跃的用户才能用电子邮件或手机号登录。我的数据库中有一个活动字段,如果用户处于活动状态,或者用户处于非活动状态,则设置为1,但设置为0,但不知道如何执行此操作。请大家帮我解决这个问题。我正在使用laravel 5.3。Laravel身份验证不能在laravel中正常工作5.3

LoginController代码

<?php 
namespace App\Http\Controllers\Auth; 
use Illuminate\Http\Request; 
use App\Http\Controllers\Controller; 
use Illuminate\Foundation\Auth\AuthenticatesUsers; 

class LoginController extends Controller 
{ 
    use AuthenticatesUsers; 
    protected $redirectTo = '/home'; 
    public function __construct() 
    { 
     $this->middleware('guest', ['except' => 'logout']); 
    } 
    protected $username = 'email'; 
    public function loginNameOrEmail(Request $request) 
    { 
     $field = filter_var($request->input('email'), FILTER_VALIDATE_EMAIL) ? 'email' : 'mobile'; 
     $request->merge([$field => $request->input('email')]); 
     $this->username = $field; 
     return $this->login($request);  
    } 
    public function username() 
    { 
     return $this->username; 
    } 
    protected function authenticated($request, $user) 
    { 
     if($user->is_admin == 1) { 
      return redirect()->intended('dashboard'); 
     } 
     return redirect()->intended('/home'); 
    } 
} 

回答

1

您也可以在除了用户的电子邮件和密码添加额外的条件,认证查询。例如,我们可以验证用户标记为“主动”:

if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) { 
    // The user is active, not suspended, and exists. 
} 

更新

最简单的方法是重写credentials方法:

protected function credentials(Request $request) { 

     $request['active'] = 1; 
     return $request->only($this->username(), 'password', 'active'); 
} 

添加这种方法在你的LoginController

Docs

+0

如果我添加此它给了我错误的LoginController.php线47 FatalErrorException: 类“应用程序\ HTTP \ \控制器验证\验证”未找到@艾米特 –

+0

我怎么能覆盖'登录“方法。你会举一些例子吗? –

+0

如果我覆盖它,它给了我错误,我不能用电子邮件或移动登录没有 –