在 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 现在无需每次都指定用户即可工作。
我想在 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
我还在 $table
和 $primaryKey
的 class 中设置了受保护的属性,以指定我的自定义 table 名称和主键名称。
然后在我的中间件中,我检查用户是否已登录,如果他或她已登录,那么我 运行 这个:
\Illuminate\Support\Facades\Auth::login(\App\Models\User::find($userId))
当我完成所有这些操作后,我可以在任何需要的地方使用 Auth::user()
。据推测,gates 现在无需每次都指定用户即可工作。