2016-06-08 50 views
0

我有一个用户表,其中包含用户的每个细节,包括一个名为'isActive'这是一个布尔字段。如何登录Laravel 5.2中的活动用户?

如果'isActive = 1',我想登录用户,如果'isActive = 0',我想将用户重定向到登录页面。

我的代码如下:

public function postSignIn(Request $request) 

{ 
    $this->validate($request, [ 
    'username' => 'required', 
    'password' => 'required' 
    ]); 

    if(Auth::attempt(['username' => $request['username'], 'password' => $request['password']])) { 
    return redirect()->route('home'); 
    } 
} 

上面的代码让我正常签收。无论是否调用isActive字段。

回答

1

Documentation

如果你愿意,你还可以在除了用户的电子邮件或用户名和密码添加额外的条件,认证 查询。对于 例如,我们可以验证用户标记为“活跃”:

在你的情况,你只需要添加‘isActive’=> 1阵列。

你的代码应该是: -

if (Auth::attempt(['username' => $request['username'], 'password' => $request['password'],'isActive' => 1])) { 
    // The user is active, not suspended, and exists. 
} 
else{ 
    // The user is Inactive, suspended, or not exists. 
    return redirect()->route('home'); 
} 
+0

谢谢。这项作品 – edmond

+0

不客气:-) –

+0

我有更多的问题。例如,我的用户已登录,然后决定停用它们。 – edmond

1

只需添加额外字段到attempt方法

if(Auth::attempt([ 
    'username' => $request['username'], 
    'password' => $request['password'], 
    'isActive' => 1, 
    ]) 
) 
{ 
    return redirect()->route('home'); 
} 

这是所有覆盖in the documentation

+0

谢谢,这个作品 – edmond

+0

@edmond你可能upvote和/或接受答案? – Mei

1

我不知道你们从哪里得到你的代码,因为我的代码差别很大。你们是升级到5.2还是通过全新5.2安装?下面是我在我的登录方法:

if (Auth::guard($this->getGuard())->attempt($credentials, $request->has('remember'))) { 
     return $this->handleUserWasAuthenticated($request, $throttles); 
    } 

我不想重写记忆功能,所以我用这样的方式:

/** 
* Get the needed authorization credentials from the request. 
* 
* @param \Illuminate\Http\Request $request 
* @return array 
*/ 
protected function getCredentials(Request $request) 
{ 
    $request = $request->only($this->loginUsername(), 'password'); 
    $request['active'] = true; 
    return $request; 
} 

基本上在App/Http/Controllers/Auth/AuthController添加$request['active'] = true;到getCredential方法鲍勃是你的叔叔。

+0

感谢您分享此内容。 – neo108