You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8中如何使用password_new字段替代password实现用户认证

解决Laravel 8自定义密码字段认证的「Undefined index: password」错误

出现这个错误的核心原因是Laravel认证系统默认依赖password字段,改用password_new时,需要明确告知框架使用自定义字段,同时修正Auth::attempt的调用逻辑。

步骤1:修改User模型,指定认证密码字段

在app/Models/User.php中重写getAuthPassword方法,让框架验证时读取password_new字段的值:

<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use Notifiable;

    // 其他模型代码...

    /**
     * 指定认证用的密码字段
     * @return string
     */
    public function getAuthPassword()
    {
        return $this->password_new;
    }
}

步骤2:修正控制器中的Auth::attempt调用

原写法会让框架尝试查找默认的password字段,导致索引错误。正确的调用是将查询条件(邮箱)放在第一个参数,输入的明文密码放在第二个参数,「记住我」选项放在第三个参数:

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

    if (Auth::attempt(['email' => $request->email], $request->password, $request->remember)) {
        $request->session()->regenerate();

        return redirect()->intended(RouteServiceProvider::HOME);
    }

    return back()->withErrors(['error' => '登录失败,请重试。']);
}

额外验证项

  • 确保数据库password_new字段存储的是哈希加密后的密码(创建用户时需用Hash::make($password)生成);
  • 视图表单无需修改,保持name="password"的输入框即可,输入的密码会自动与password_new字段做哈希匹配。

内容的提问来源于stack exchange,提问作者Abaij

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 13:07:37