【发布时间】:2021-07-12 14:41:34
【问题描述】:
我想在 Laravel 8 中使用 Gates,但我们使用的是自定义身份验证,因此 Laravel 不知道要传递给 Gate 的 $user 记录。那么如何告诉 Laravel 某个用户当前已登录,从而使用正确的用户记录呢?
谢谢。
【问题讨论】:
标签: php laravel laravel-authentication laravel-authorization laravel-gate
我想在 Laravel 8 中使用 Gates,但我们使用的是自定义身份验证,因此 Laravel 不知道要传递给 Gate 的 $user 记录。那么如何告诉 Laravel 某个用户当前已登录,从而使用正确的用户记录呢?
谢谢。
【问题讨论】:
标签: php laravel laravel-authentication laravel-authorization laravel-gate
这就是我所做的:
在\App\Models 中,我创建了一个扩展Illuminate\Foundation\Auth\User 的用户类
我还在 $table 和 $primaryKey 类中设置了受保护的属性,以指定我的自定义表名和主键名。
然后在我的中间件中,我检查用户是否登录,如果他或她登录,然后我运行这个:
\Illuminate\Support\Facades\Auth::login(\App\Models\User::find($userId))
当我完成这一切时,我可以在任何我想要的地方使用Auth::user()。据推测,gates 现在无需每次都指定用户即可工作。
【讨论】:
不知道你的验证过程是在 AppServiceProvider 文件中还是在控制器中完成的。
但我认为在控制器中验证后,您可以使用该功能
Auth::setUser($user)
【讨论】:
您可以使用forUser 方法:
Gate::forUser($user)->allows('update-post', $post);
// ^^^^^^^^^^^^^^
查看文档的this section。
【讨论】: