【发布时间】:2016-11-11 00:01:57
【问题描述】:
在我的 Laravel 应用程序中,用户可以禁用(而不是删除)他们的帐户以从网站上消失。但是,如果他们再次尝试登录,他们的帐户应该会自动激活,并且应该会成功登录。
这是通过用户表中的“活动”列和用户模型中的全局范围来完成的:
protected static function boot() {
parent::boot();
static::addGlobalScope('active', function(Builder $builder) {
$builder->where('active', 1);
});
}
现在的问题是那些不活跃的帐户无法再次登录,因为 AuthController 没有找到它们(超出范围)。
我需要达到的目标:
- 使 AuthController 忽略全局范围“活动”。
- 如果用户名和密码正确,则将“活动”列值更改为“1”。
我现在的想法是找到使用 withoutGlobalScope 的用户,手动验证密码,将“活动”列更改为 1,然后进行常规登录。
在我的 AuthController 中的 postLogin 方法中:
$user = User::withoutGlobalScope('active')
->where('username', $request->username)
->first();
if($user != null) {
if (Hash::check($request->username, $user->password))
{
// Set active column to 1
}
}
return $this->login($request);
那么问题是如何让 AuthController 在不改变 Laravel 主代码的情况下忽略全局作用域,从而保持更新?
谢谢。
【问题讨论】:
-
我遇到了类似的问题。我使用了这个解决方案:stackoverflow.com/questions/34696134/laravel-global-scope-auth 创建两个单独的用户模型。第一个没有全局范围,仅用于身份验证。第二个扩展第一个,包括全局范围,并用于其他所有内容。
-
如果我错了,请纠正我,但您没有在这里使用
withoutGlobalScope回答您自己的问题吗?