【问题标题】:Change the default Laravel authentificaton email field to user_email将默认 Laravel 身份验证电子邮件字段更改为 user_email
【发布时间】:2019-07-27 20:13:31
【问题描述】:

当我将 email 字段从数据库更改为 user_email 时出现 Laravel 错误

Illuminate\Database\QueryException SQLSTATE[42S22]:找不到列: 1054 'where 子句'中的未知列'email'(SQL:select * from ns_users 其中email = admin@yahoo.com 限制 1)

Schema::create('ns_users', function (Blueprint $table) {
        $table->increments('user_id');
        $table->boolean('active')->default(0);/*by default the user is not active*/
        $table->integer('role')->default(0);/* role 0 means user and role 1 means admin!! */
        $table->string('name');
        $table->string('user_email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
});

有人知道我必须在默认身份验证中进行哪些更改才能使用user_email 字段而不是email

【问题讨论】:

  • 您需要覆盖默认的身份验证登录功能才能使用 user_email 字段。
  • 浏览这个文件vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php 在这里你可以找到username() 函数只需将它复制并粘贴到你的身份验证登录控制器中,根据 laravel 版本它可能是身份验证控制器或登录控制器。 public function username() { return 'email'; } 将此代码粘贴到其中并将返回值更改为user_email

标签: laravel custom-authentication laravel-authentication


【解决方案1】:

默认情况下,Laravel 使用 email 字段进行身份验证。如果你想自定义这个,你可以在你的LoginController 上定义一个username 方法:

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

【讨论】:

    【解决方案2】:
    public function getEmailAttribute()
        {
            return $this->user_email;
        }
    

    为我工作

    【讨论】:

    • 你可能想提到你在 User.php 模型中这样做
    【解决方案3】:

    如果你们中的任何人使用尝试方法手动处理 laravel 身份验证。 您需要做的就是将键名“电子邮件”更改为您在传递给尝试方法的关联数组中所需的名称。

    Auth::attempt(['user_email' => $email, 'password' => $password], $remember)
    

    【讨论】:

      猜你喜欢
      • 2023-01-11
      • 2019-02-23
      • 1970-01-01
      • 2015-07-18
      • 2020-07-13
      • 2018-01-19
      • 1970-01-01
      • 2021-03-20
      • 1970-01-01
      相关资源
      最近更新 更多