【问题标题】:How to completely change the auth table in laravel?如何彻底改变laravel中的auth表?
【发布时间】:2020-10-23 23:46:26
【问题描述】:

我有 accounts 表,我想在其中 Authenticatable 并且我已经做到了这一点,已经在这个 stackoverflow-link 中回答了 @PintuKumar 并且它是工作正常。

我的问题在这里,下面的行正在工作

auth()->user()->email

但我想要的是下面的那行,当我尝试时,它不起作用

auth()->account()->email

它返回以下错误:

方法 Illuminate\Auth\SessionGuard::account 不存在。 (查看:D:\workspace\laravel\blog\resources\views\home.blade.php)

有人知道如何将函数名称从用户更改为自定义吗?我真的很纠结这个。

【问题讨论】:

    标签: php laravel laravel-6 laravel-authentication


    【解决方案1】:

    方法名称无关紧要,user 方法并不意味着您的身份验证守卫获取App\User,它获取该守卫身份验证的实体,无论它是什么。

    如果你真的想这样做(注意它只不过是一个别名),你必须继承你的会话保护并添加这个方法

    public function account()
    {
        return $this->user();
    }
    

    但这又是一个坏主意,特别是因为您忽略了每个守卫都实现的方法。如果有一天你决定改变使用的守卫,你的代码也会因为同样的原因而崩溃。

    【讨论】:

    • 感谢先生的想法,现在我不会做任何修改,我会坚持使用user()。感谢您的有用建议。
    【解决方案2】:

    好吧,以前从未这样做过,但您可以转到 vendor\laravel\framework\src\Illuminate\Auth\SessionGuard.php 并将 user() 更改为所需的名称。就个人而言,对于测试,我会复制整个函数,更改为account(),但保留users(),以防出现问题。

    【讨论】:

    • vendor 目录不能这样更改,因为它是 gitignored 并且任何更新都会删除更改。
    • 这是真的。但你的问题指向Auth()。请改用app/User
    • @hmrneves 已经尝试过,返回另一个错误 Class Illuminate\Auth\SessionGuard 包含 1 个抽象方法,因此必须声明为抽象方法或实现其余方法(Illuminate\Contracts\Auth\Guard: :user)
    • 这很正常,您正在尝试弄乱框架。请阅读所有答案和cmets。
    猜你喜欢
    • 1970-01-01
    • 2013-08-24
    • 2015-06-23
    • 2016-09-18
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多