我们决定将Laravel
用于项目作为未来框架的测试运行,并且非常喜欢它。不过,我们遇到了一个问题。
我们使用处理user authentication
的特质IlluminateFoundationAuthAuthenticatesUsers
。效果很好。但是,我们在数据库中有一个名为userstatus
的列,它可以是0
或1
。
我们如何将此 where 子句注入IlluminateFoundationAuthAuthenticatesUsers
特征中?
我在想也许这里有一些事情(在我的LoginController
(:
public function authenticated($request , $user){
//if $user->userstatus != 1 logout and redirect to start page
}
但我不知道如何logout
(我现在正在研究(。
你的逻辑是正确的,你应该重新定义login
并在LoginController
中authenticated
方法。
您的方法应如下所示:
此方法应该在您的LoginController.php
范围内:
class LoginController extends Controller
{
use AuthenticatesUsers {
login as public loginParent;
}
protected function login(Request $request){
$default = '/';
$user = User::where('email', $request->get('email'))->NotActive->first();
if($user){
return redirect()->intended($default);
}
return $this->loginParent($request);
}
protected function authenticated(Request $request, $user)
{
if($user->not_active) {
$this->logout($request);
}
}
}
那么我们应该User.php
模型中创建ScopeNotActive
方法作为局部范围:
//User.php
public function ScopeNotActive($query){
return $query->where('userStatus', '!=', 1);
}
和一个突变器来检查用户是否处于活动状态:
// User.php
public function getNotActiveAttribute(){
return $this->userStatus != 1;
}