在LoginController(Laravel 8)中,未定义数组键“password”。

3
我可以帮你翻译,以下是翻译结果:

我正在尝试自定义我的登录页面,但它给我抛出了标题中显示的错误。

这是LoginController中的函数:

public function login(Request $request) {
  $request->validate([
    'username' => 'required|string|email',
    'password' => 'required|string',
    'remember' => 'boolean',
  ]);

  #:: Undefined array key "password"
  if ($this->guard()->attempt(['a_username' => $request->username, 'a_password' => $request->password], $request->has('remember'))) {
    return $this->sendLoginResponse($request);
  }

  return $this->sendFailedLoginResponse($request);
}

我为什么使用这些自定义列而不是laravel默认的列呢。因为我有两个用于身份验证的表。

在我的数据库中,我有以下列:a_username (即电子邮件地址) a_password (即密码)

这是登录表单:

<form class="js-validation-signin" action="{{ route('login') }}" method="POST">
  @csrf
  <div class="form-group">
    <input type="email" class="form-control form-control-lg form-control-alt py-4" name="username" placeholder="Username" value="{{ old('username') }}">
  </div>
  <div class="form-group">
    <input type="password" class="form-control form-control-lg form-control-alt py-4" name="password" placeholder="Password">
  </div>
</form>

感谢您的耐心等待,我需要将这个问题从西班牙语翻译成英语。 :)


我也在定制我的登录界面遇到了困难,因为我的登录凭证是user_name和user_pass,并且使用其他模型进行登录。如果你能提供一些帮助,我将不胜感激。谢谢。 - undefined
1个回答

4

Eloquent用户提供程序包含以下代码

public function validateCredentials(UserContract $user, array $credentials)
{
    $plain = $credentials['password'];
   
    return $this->hasher->check($plain, $user->getAuthPassword());
}

要覆盖默认功能,需要执行以下步骤:
1. 在用户模型中添加(覆盖)getAuthPassword方法。
public function getAuthPassword()
{
    return $this->a_password;
}
  1. 更新您的代码(将 a_password 更改为 password):
 if ($this->guard()->attempt(['a_username' => $request->username, 'password' => $request->password], $request->has('remember'))) {
    return $this->sendLoginResponse($request);
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接