Laravel多认证场景下企业登录表单验证错误不显示求助
解决Laravel多认证中企业登录表单验证错误不显示的问题
嘿,我明白你作为Laravel新手遇到这个问题的困惑!咱们来一步步解决它:
你的代码目前只处理了字段格式验证的错误(比如邮箱格式不对、必填项为空),但当Auth::guard('company')->attempt()失败时(比如邮箱密码不匹配、企业用户不存在),你没有把这个关键的错误信息存入session,所以表单里的$errors变量根本没有对应的错误提示,自然就显示不出来啦!
修改你的登录逻辑代码
把你的登录方法改成这样,手动添加登录失败的错误信息:
public function login(Request $request) { // 先做字段格式验证,这一步失败会自动携带错误返回上一页 $this->validate($request, [ 'email' => 'required|email', 'password' => 'required' ]); // 尝试使用企业guard登录 if (Auth::guard('company')->attempt( ['email' => $request->email, 'password' => $request->password], $request->remember )) { return redirect()->intended(route('company')); } // 登录失败时,手动将错误信息存入session return redirect()->back() ->withInput($request->only('email','remember')) ->withErrors(['email' => '邮箱或密码不正确,请重新输入']); }
为什么这样修改?
->withErrors()方法会把错误信息注入Laravel的错误容器中,这样你的表单里的$errors->has('email')就能检测到错误,进而显示对应的提示内容。- 你可以根据需求修改错误提示的文字,比如用Laravel的语言包功能(
__('auth.failed'))来实现多语言支持,更规范。
额外检查项
确保你的企业登录路由是在web中间件组下(Laravel默认路由文件的路由都包含这个中间件),因为错误信息和用户输入的回显都依赖session,而web中间件提供了session支持。
你的表单代码是没问题的,只要session里有了对应的错误信息,就能正常显示啦!
内容的提问来源于stack exchange,提问作者user8980183
相关产品推荐
相关产品推荐

