Laravel:如何更改默认的身份验证密码字段名称?

2022-08-30 17:34:10

我目前正在进行我的第一个laravel项目,我遇到了一个问题。

如果您有使用laravel的经验,您可能知道通过调用您将获得处理登录和注册的预定义机制。php artisan make:auth

此机制设置为理解几个常用单词,以便自动执行整个过程。

在我的情况下发生的问题是,我正在使用oracle db,它不会让我有一个名称为的表列,因为它是一个系统关键字,并且在尝试插入用户时会引发错误。password

到目前为止,我已尝试将我的列更改为,并且它按预期在我的注册表中工作。已成功插入“用户”行,并且我的页面被重定向到 /home。passwordpasswd

Register

Success

但是当我尝试注销然后重新登录时,我收到此错误,告诉我我的凭据不正确:

enter image description here

至于我的代码,我已经更改了我的代码,因此它需要用户名而不是电子邮件RegisterController.php

protected function validator(array $data)
{
    return Validator::make($data, [
        'username' => 'required|max:50|unique:ECON_USERS',
        'passwd' => 'required|min:6|confirmed',
    ]);
}

protected function create(array $data)
{
    return User::create([
        'username'   => $data['username'],
        'passwd'     => bcrypt($data['passwd'])
    ]);
}

用户$fillable

protected $fillable = [
    'username', 'passwd'
];

我猜Auth正在尝试进行身份验证,而不是Auth正在搜索而不是。emailusernamepasswordpasswd


答案 1

为了代替 ,您可以在登录控制器中覆盖 username() .phpusernameemail

/**
 * Get the login username to be used by the controller.
 *
 * @return string
 */
public function username()
{
    return 'username';
}

对于 ,您可以在 App\User 中定义一个访问器,而不是 .phppasswdpassword

/**
 * Get the password for the user.
 *
 * @return string
 */
public function getAuthPassword()
{
    return $this->passwd;
}

login.blade.php:将输入替换为 ,但不更改 的输入名称。emailusernamepassword


答案 2

使用这个。这对我来说是工作。

到目前为止,我已经更改了用户.php

public function getAuthPassword(){  
    return $this->senha;
}

public function setPasswordAttribute($value)
    {
        $this->attributes['password'] = bcrypt($value);
    }

同样在登录控制器上.php

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

推荐