0

我想在 Laravel 8 中使用 Gates,但我们使用的是自定义身份验证,所以 Laravel 不知道要传递给 Gate 的 $user 记录。那么如何告诉 Laravel 某个用户当前已登录,所以会使用正确的用户记录呢?

谢谢。

4

3 回答 3

1

您可以使用以下forUser方法:

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

检查文档的这一部分

于 2021-04-18T01:35:10.113 回答
0

我不知道您的验证过程是在 AppServiceProvider 文件中还是在控制器中完成的。

但我认为在控制器中验证后,您可以使用该功能

Auth::setUser($user)
于 2021-04-18T08:16:36.543 回答
0

所以这就是我所做的:

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

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

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

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

当我做这一切时,我可以Auth::user()在任何我想要的地方使用。据推测,gates 现在无需每次都指定用户即可工作。

于 2021-04-19T15:01:08.140 回答