Laravel中出现「Auth User not fetched」错误,请求排查Paytab支付页面处理函数问题
Laravel中出现「Auth User not fetched」错误,请求排查Paytab支付页面处理函数问题
嘿,看起来你在处理Paytab支付页面的Laravel函数时碰到了「Auth User not fetched」的错误,我来帮你梳理下可能的问题点,一步步排查:
1. 路由/方法未加认证保护
最常见的原因就是当前访问这个支付页面的用户没有被认证,导致代码里任何依赖Auth::user()的地方都会报错。你可以先检查:
- 这个
index方法对应的路由有没有加上auth中间件?比如在routes/web.php里应该是这样:Route::get('/paytab/{id}', [PaytabController::class, 'index'])->middleware('auth'); - 如果路由没加中间件,也可以在方法内部先做认证检查:
public function index(Request $request, $id) { // 先判断用户是否登录 if (!Auth::check()) { return redirect()->route('login')->with('error', '请先登录后再进行支付操作'); } // 后续原有代码... }
2. 依赖方法的认证缺失
你代码里调用的几个方法/函数可能本身依赖认证用户:
findInvoiceModel($id):检查这个方法的实现,它是不是在查询发票时默认关联了当前登录用户(比如where('user_id', Auth::id()))?如果用户未认证,这个查询就会出错,直接触发「Auth User not fetched」。getCardDetails($id):这个全局函数是不是也尝试获取当前用户的卡片信息?比如内部调用了Auth::user()->cards之类的逻辑,如果用户没登录,自然拿不到数据。
3. 数据库查询的权限过滤缺失
在查询EventSubscription的子查询里,你只过滤了invoice_id和module_type,但没有限定这个发票属于当前登录用户。如果数据库里存在其他用户的同ID发票,不仅会导致数据错误,还可能在后续关联EventData时触发权限相关的认证错误。可以给子查询加上用户过滤:
$event_subscription = EventSubscription::where('id', function ($query) use ($id) { $query->select('module_id') ->from('module_invoice') ->where(['invoice_id' => $id, 'module_type' => 'event-member-register']) ->where('user_id', Auth::id()); // 确保只查询当前用户的关联记录 })->first();
4. 视图渲染的认证依赖
最后,你返回的failure视图(或者后续要渲染的支付页面视图)可能直接使用了Auth::user()但没做判断。比如视图里写了{{ Auth::user()->email }},如果用户未登录就会报错。可以在视图里加上认证判断:
@auth <p>当前用户:{{ Auth::user()->name }}</p> @else <p>请先登录</p> @endauth
另外,建议你打开Laravel的调试模式(把.env里的APP_DEBUG设为true),查看具体的错误堆栈信息,这样能精准定位到是哪一行代码触发的错误,修复起来会更高效。
备注:内容来源于stack exchange,提问作者BIlal Ahmed
相关产品推荐
相关产品推荐

