Laravel登录条件认证OR语句错误致跳转异常,求正确写法
解决登录后按部门跳转的条件判断问题
嘿,我发现你代码里的OR条件写法有问题,这就是导致跳转错误的核心原因!咱们一步步来修正:
问题出在哪?
你原来的条件判断写法:
if (auth()->user()->department == 'HR' || 'Human Resource' )
在PHP里,||逻辑运算符的两边必须是完整的布尔表达式。单独的字符串'Human Resource'是非空值,会被PHP自动解析为true,所以这个条件永远都会成立——不管用户的部门是什么,第一个if都会触发,导致所有人都跳转到/hr页面。
正确的写法
有两种靠谱的方式来实现你的需求:
方式1:完整的多条件比较
把每个部门值都和用户的department做完整比较:
protected $redirectTo = '/'; protected function redirectTo() { $userDepartment = auth()->user()->department; if ($userDepartment == 'HR' || $userDepartment == 'Human Resource') { return '/hr'; } elseif ($userDepartment == 'Accountant' || $userDepartment == 'ACC') { return '/acc'; } else { return '/'; } }
方式2:用in_array()简化判断(更推荐)
如果后续部门选项增多,用in_array()会让代码更简洁易读:
protected $redirectTo = '/'; protected function redirectTo() { $userDepartment = auth()->user()->department; if (in_array($userDepartment, ['HR', 'Human Resource'])) { return '/hr'; } elseif (in_array($userDepartment, ['Accountant', 'ACC'])) { return '/acc'; } else { return '/'; } }
小提示
把用户的部门值先存到变量$userDepartment里,避免重复调用auth()->user()->department,既提升性能也让代码更整洁~
内容的提问来源于stack exchange,提问作者swm
相关产品推荐
相关产品推荐

