【问题标题】:Changing email column name in laravel 5.6 in default users table在默认用户表中更改 laravel 5.6 中的电子邮件列名称
【发布时间】:2018-12-12 13:57:39
【问题描述】:

我有自己的用户表,我想在身份验证中使用,但问题是电子邮件字段是“userEmail”而不是“电子邮件”。

对于登录页面,我在 LoginController.php 中覆盖了以下方法

public function username()
{
    return 'userEmail';
}

并更改了输入字段中的名称。

<input id="userEmail" type="email" name="userEmail" value="{{ old('userEmail') }}" class="{{ $errors->has('userEmail') ? 'is-invalid' : '' }}">

这可以正常登录,需要解决忘记密码和重置密码表单,因为它们不起作用

因此,Laravel 5.6 中的任何解决方案

【问题讨论】:

  • 重命名表格列可能更容易。
  • @apokryfos 你轻松多了,但我做不到。

标签: php laravel-5.6 laravel-authentication


【解决方案1】:

您可以向用户模型添加访问器和修改器方法:

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

public function setEmailAttribute($value) {
    $this->attributes['userEmail'] = $value;
}

Docs here

【讨论】:

    【解决方案2】:

    我认为你可以利用 Laravel Mutators:

    https://laravel.com/docs/5.6/eloquent-mutators

    没有时间测试以下内容,但应该是您正在寻找的内容:

    class User extends Model
    {
        /**
         * Get the user's email.
         *
         * @param  string  $value
         * @return string
         */
        public function getEmailAttribute($value)
        {
            return $this->userEmail;
        }
    }
    

    【讨论】:

      【解决方案3】:

      为了节省修改 php 代码(和破坏某些东西),创建用户表的 sql 视图并将实际字段名称映射到 User 类正在使用的名称可能会更容易,例如

      CREATE VIEW v_user_auth AS
      SELECT user_id AS id
      , user_created_time AS created_at
      , user_updated_time AS updated_at
      , user_name AS name
      , user_email AS email
      , user_password AS password
      , user_remember_token AS remember_token
      FROM t_user
      

      在 User.class 中添加以下内容以使其使用视图:

      protected $table = 'v_user_auth';
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-06
        • 2015-07-18
        • 2019-02-23
        • 2022-01-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多