Laravel 5.7.28覆盖getAuthPassword仍然会引发未定义的索引:密码

时间:2019-03-10 13:51:07

标签: php laravel

我最近进入Laravel,并且想为我的Web应用程序创建一个用户系统。

我使用php artisan make:auth来创建标准的Laravel身份验证视图/控制器。现在,我想更改用户表的列名。我想将名称重命名为userName,将电子邮件重命名为userEmail,将密码重命名为userPassword。

注册工作正常,但是登录有问题。

完全按照http://www.lasselaursen.com/post/changing-standard-fieldcolumn-names-in-laravel-5s-default-users-table中的说明进行了一些小的调整之后,例如,我取代了LoginController中的登录,而不是覆盖AuthController中的postLogin。

现在尝试登录时,总是会显示调试窗口:未定义的索引:.. \ vendor \ laravel \ framework \ src \ Illuminate \ Auth \ GenericUser.php中的密码

我如下重写了User.php类中的getAuthPassword()函数

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

我在LoginController上的登录功能如下:

public function login(Request $request)
{
    $this->validate($request, [
        'userEmail' => 'required|email', 'password' => 'required',
    ]);

    $credentials = $request->only('userEmail', 'password');

    if (Auth::attempt($credentials, $request->has('remember')))
    {
        return redirect()->intended($this->redirectTo);
    }

    return redirect($this->loginPath())
        ->withInput($request->only('userEmail', 'remember'))
        ->withErrors([
            'userEmail' => $this->getFailedLoginMessage(),
        ]);
}

我将邮件的login.blade.php中的名称字段更改为userEmail,并保留了该字段的密码作为密码。

我觉得我在这里确实缺少一些明显的东西,但是我找不到它...

如果您需要更多代码段,请打我。

1 个答案:

答案 0 :(得分:-1)

Laravel默认情况下将使用电子邮件字段进行身份验证。由于已将其自定义为userEmail,因此还必须在LoginController上定义用户名方法,如下所示:

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