Laravel评论功能登录验证问题排查与解决
问题解决:未登录用户评论未显示提示直接跳转的原因及修复
分享一个我刚踩过的评论功能坑:原本需求是仅登录用户可发表评论,未登录时显示提示“You must be logged in to post a comment”,结果测试时发现未登录状态下根本看不到提示,直接就跳转回之前的页面了。
折腾了半天终于找到问题根源:我的PostCommentsController被配置在了admin中间件里!这个中间件不仅要求用户登录,还强制需要管理员权限,一旦检测到用户未登录,会直接跳转到首页,导致控制器里我写的未登录分支代码根本没机会执行。
下面是我最初写的控制器代码:
public function store(Request $request) { if (Auth::check()) { $user = Auth::user(); $data = [ 'post_id' => $request->post_id, 'author' => $user->name, 'email' => $user->email, 'body' => $request->body ]; Comment::create($data); $request->session()->flash('comment_success','Your comment have been submited and is waiting moderation'); return redirect()->back(); } else { $request->session()->flash('login','You must be logged in to post a comment'); return redirect('/login')->back(); } }
顺带提一句,代码里还有个小bug:redirect('/login')->back()这种写法逻辑矛盾,应该改成redirect()->back()(停留在当前页面显示提示)或者redirect('/login')(跳转到登录页),不过这不是导致跳转的核心问题。
修复方案:
- 把
PostCommentsController从admin中间件中移除,改用普通的auth中间件(只验证用户是否登录,不需要管理员权限) - 或者如果业务需要区分权限,单独给评论相关路由配置合适的中间件,确保未登录用户的请求能进入控制器的未登录分支,从而触发提示信息的显示
内容的提问来源于stack exchange,提问作者csow
相关产品推荐
相关产品推荐

