【问题标题】:Laravel 8 user table column namesLaravel 8 用户表列名
【发布时间】:2021-04-12 03:12:18
【问题描述】:

我将 laravel 8 与现有的用户表一起使用。除了密码重置链接功能外,一切都按预期工作。这是因为我的表的电子邮件列名称为“电子邮件”而不是“电子邮件”。其他应用程序使用此表,因此无法更改列名。如果我在框架本身中手动设置列名(下面的示例),我可以使密码重置链接功能正常工作。

文件:/vendor/laravel/framework/src/Illuminate/Auth/EloquentUserProvider.php

public function retrieveByCredentials(array $credentials)
{
    // framework code that retieves the user record for email address

    if ($res) {
        $res->email = $res->Email;
    }

    // rest of frame work code
}

这似乎有点“hacky”。有更好的方法吗?

Laravel 将受益于更多关于用户表的自定义(自定义用户表名、列名等)。

【问题讨论】:

  • 只需复制这些工作代码并在控制器中过去,这将被覆盖
  • 您使用什么入门工具包进行身份验证脚手架?
  • "Laravel 将受益于更多关于用户表的自定义(自定义用户表名、列名等)。"在 Laravel 中基本上没有什么是你不能自定义的,你可以争论它是否是最优的。但请先阅读文档。
  • 阅读源代码我在EloquentUserProvider 中看不到它依赖email 而不是Email 的任何地方我认为这全部委托给作为样板发布但可以修改而不是部分框架代码
  • 您可以创建自定义函数并根据标志调用它。

标签: php laravel authentication laravel-8


【解决方案1】:

Laravelmutatorsaccessors。这样您就可以更改 -> 电子邮件访问或分配它的行为。将此 sn-p 添加到您的 User.php 模型中。

class User {
    public function getEmailAttribute()
    {
        return $this->attributes['Email'];
    }
}

您可以阅读有关它的docs。函数的命名约定是get{PropertyName}Attribute,如果你这样定义你的函数,你可以很容易地覆盖Laravel中的属性逻辑。让它使用column Email

【讨论】:

  • 这可能应该与 setEmailAttribute 配对以更新正确的列
  • 谢谢,正是我想要的。
猜你喜欢
  • 2021-10-26
  • 2017-11-19
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 2019-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多