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

CodeIgniter多用户登录时出现"Trying to get property of non-object"错误求助

解决登录错误输入时的"Trying to get property of non-object"问题

嘿,这个问题我之前也踩过坑!本质就是输入错误信息时,代码还在硬着头皮访问一个根本不存在的对象属性,下面给你一步步拆解解决:

错误原因分析

正常登录时,你的Model能查询到匹配的用户,返回一个有效的对象,所以访问属性完全没问题;但输入错误的账号/密码时,Model查不到对应数据,返回了null或者false(不是对象),而Controller第34行的代码还在像访问对象一样读取它的属性,直接触发了这个错误。

具体修复步骤

1. 先确认Model的查询逻辑

看一下你用来查询用户的Model代码,比如类似这样:

// 示例Model查询方法
public function findUserByEmail($email) {
    return $this->where('email', $email)->first();
}

当没有匹配用户时,first()会返回null,这是正常行为,但你需要确保Controller能正确处理这个返回值。

2. 重点修正Controller的登录逻辑(针对第34行)

假设第34行是类似$user->id或者$user->username这类代码,你必须在访问属性前先判断$user是不是有效的对象:

// ❌ 错误写法:没校验用户是否存在就访问属性
$user = User::where('email', $request->email)->first();
if (Hash::check($request->password, $user->password)) {
    // 正常登录跳转逻辑
} else {
    // 这里如果$user是null,访问$user->password直接报错!
    return back()->withErrors('登录失败');
}

// ✅ 正确写法:先确认用户存在,再校验密码
$user = User::where('email', $request->email)->first();
if ($user && Hash::check($request->password, $user->password)) {
    // 用户存在且密码正确,执行登录跳转
    auth()->login($user);
    return redirect()->to('/target-page');
} else {
    // 用户不存在或密码错误,直接返回提示,绝不碰$user的属性
    return back()->withErrors(['login' => '邮箱或密码错误']);
}

核心原则就是:永远不要在不确定变量是对象的情况下,直接访问它的属性。

3. 快速调试小技巧

如果还是摸不准问题在哪,在第34行之前加一行调试代码:

dd($user); // 打印$user的值,错误输入时你会发现它是null

一眼就能确认变量类型,精准定位问题。

内容的提问来源于stack exchange,提问作者Tahmid-ni7

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:12:55