我在Laravel 5.2中使用开箱即用的身份验证(使用artisan命令make:auth)。它就像一个魅力。
事情是,我想限制只有活跃用户的登录(deleted_at = NULL)。
然而,当使用软删除时,我无法使用user_id外键检索其他模型(尽管用户已被删除,但我仍然需要访问用户信息)。
什么是好方法?
我提出的一个替代方案是使用" active"布尔列而不是" deleted_at"日期栏。通过这种方式,我可以只使用" active" = TRUE来过滤用户,并且对外键没有任何问题。
在这种情况下,如果"活跃"设置为TRUE?
干杯!
答案 0 :(得分:3)
Laravel用于在控制器中进行身份验证的特征具有handleUserWasAuthenticated()
方法。它检查另一个名为authenticated()
的方法(默认情况下未定义),并在完全验证用户并让他们访问您的应用程序之前调用该方法。因此,如果您在自己的 AuthController 中定义此方法,则可以执行任何后验证检查,例如用户是否处于活动状态。
class AuthController
{
public function authenticated($request, $user)
{
if (! $user->is_active) {
// Throw exception, display error etc.
}
return redirect()->intended($this->redirectPath());
}
}
答案 1 :(得分:1)
您始终可以将任何额外参数传递给Auth::attempt()
方法,如下所示:
if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
// Redirect to required route/url
}
据我所知,你也可以为deleted_at
字段做类似的事情。
答案 2 :(得分:1)
在Auth \ AuthController.php中,添加authenticated()
函数
use Auth;
class AuthController extends Controller
{
.
.
.
public function authenticated($request, $user) {
if (! $user->active) {
Auth::logout();
return redirect('login')->withErrors([
$this->loginUsername() => 'Your '.$this->loginUsername().' is not active. Please contact Administrators'
]);
}else {
return redirect()->intended($this->redirectPath());
}
}