【问题标题】:In Laravel, how can you use a Gate if you're using custom authentication?在 Laravel 中,如果您使用自定义身份验证,如何使用 Gate?
【发布时间】:2021-07-12 14:41:34
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: php laravel laravel-authentication laravel-authorization laravel-gate


    【解决方案1】:

    这就是我所做的:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      Auth::setUser($user)
      

      【讨论】:

        【解决方案3】:

        您可以使用forUser 方法:

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

        查看文档的this section

        【讨论】:

        • 谢谢,Kenny,但在刀片中,我想简单地使用 @can("...")。不必自己指定用户真的很方便。
        • 创建帖子时需要更加具体。对于您的最新评论,请查看 this 以创建自定义指令,以便您轻松验证。
        猜你喜欢
        • 1970-01-01
        • 2017-04-20
        • 2016-06-29
        • 2011-09-01
        • 2020-04-24
        • 1970-01-01
        • 2017-12-16
        • 2015-02-23
        相关资源
        最近更新 更多