Laravel登录报Undefined property: Request::$email错误求助
报错核心原因
抛出Undefined property: Illuminate\Support\Facades\Request::$email错误的直接原因是控制器中Request类导入错误:你当前导入的是Request门面类,而非承载表单提交参数的HTTP请求实例类,导致依赖注入生成的$request对象无法读取表单提交的email、password等字段。
除此之外,代码中还存在两处会导致登录逻辑后续失败的隐藏问题:
- 模型中存在路径错误的无效Request类导入
- 认证逻辑未适配你自定义的密码字段名
senha,且注册时未对密码做哈希加密,即使修复请求报错也无法通过认证校验
修复步骤
- 修正控制器的Request类导入
打开app/Http/Controllers/Usuarios.php,删除顶部错误的use Request;语句,替换为正确的HTTP请求类导入,同时调整注册方法的参数注入、密码加密逻辑,避免明文存储密码。
- 修正控制器的Request类导入
- 清理模型中的无效导入
打开app/Models/Usuario.php,删除顶部错误的use App\Models\Model\Request;语句,同时新增密码字段映射方法,让Laravel认证逻辑识别你自定义的senha密码字段。
- 清理模型中的无效导入
- 校验前端表单字段
确认登录页表单的邮箱输入框name属性为email,密码输入框name属性为password,和后端读取的字段名保持一致。
- 校验前端表单字段
修正后的完整代码
控制器 Usuarios.php
<?php namespace App\Http\Controllers; use App\Models\Usuario; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Hash; use Illuminate\Http\Request; class Usuarios extends Controller { public function cadastrar(Request $request) { $dados = $request->all(); // 注册时对密码做哈希加密,禁止明文存储 $dados['senha'] = Hash::make($dados['senha']); $usuario = new Usuario($dados); $usuario->save(); return redirect('/')->with('mensagem_sucesso', 'Cadastro efetuado com sucesso!'); } public function index() { return view('layout/cadastrousuario'); } public function indexlogin() { return view('layout/login'); } public function logar(Request $request) { if (Auth::attempt(['email' => $request->email, 'password' => $request->password])) { dd('voce esta logado'); } else { dd('voce nao esta logado'); } } }
模型 Usuario.php
<?php namespace App\Models; use DB; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Support\Facades\Hash; class Usuario extends Authenticatable { protected $table = 'usuario'; public $timestamps = false; protected $fillable = array( "codigo", "nome", "email", "apelido", "senha", "bloqueado", "saldo", "saldo_atual", "admin" ); /** * 重写密码获取方法,映射数据库自定义的senha密码字段 */ public function getAuthPassword() { return $this->senha; } use HasFactory; }
注意:修复代码前已经注册的用户,因为密码是明文存储的,无法通过哈希校验,需要重新注册或手动将对应账号的senha字段值替换为Hash加密后的密文,才能正常登录。
内容的提问来源于stack exchange,提问作者Brujahhell
相关产品推荐
相关产品推荐

