在 Laravel 中,如果您使用自定义身份验证,如何使用门?

In Laravel, how can you use a Gate if you're using custom authentication?

我想在 Laravel 8 中使用 Gates,但我们使用的是自定义身份验证,因此 Laravel 不知道将什么 $user 记录传递到 Gate。那么我如何才能告诉Laravel某个用户当前已经登录,从而使用正确的用户记录呢?

谢谢。

您可以使用 forUser 方法:

Gate::forUser($user)->allows('update-post', $post);
//    ^^^^^^^^^^^^^^

检查文档的 this section

不知道你的验证过程是在AppServiceProvider文件中还是在controller中完成的。

但是我觉得在controller中验证之后,你可以使用函数

Auth::setUser($user)

所以这就是我所做的:

\App\Models 中,我创建了一个扩展 Illuminate\Foundation\Auth\User

的用户 class

我还在 $table$primaryKey 的 class 中设置了受保护的属性,以指定我的自定义 table 名称和主键名称。

然后在我的中间件中,我检查用户是否已登录,如果他或她已登录,那么我 运行 这个:

\Illuminate\Support\Facades\Auth::login(\App\Models\User::find($userId))

当我完成所有这些操作后,我可以在任何需要的地方使用 Auth::user()。据推测,gates 现在无需每次都指定用户即可工作。