Laravel6实现无效用户登录返回与不存在用户相同提示方案咨询
Laravel 6 无效用户登录提示自定义实现方案
以下分两种需求场景给出对应实现:
场景1:无效用户和不存在用户提示完全一致(均提示「用户不存在」)
直接在登录验证条件中加入valid=1的限制,让无效用户的认证逻辑和密码错误/用户不存在的逻辑完全复用:
- 打开
app/Http/Controllers/Auth/LoginController.php文件,新增如下方法:
use Illuminate\Http\Request; protected function credentials(Request $request) { return array_merge( $request->only($this->username(), 'password'), ['valid' => 1] ); }
- 如需把默认的凭证不匹配提示改为「用户不存在」,修改
resources/lang/zh-CN/auth.php中的failed项值为用户不存在或密码错误即可。 - 前端现有代码无需调整,错误会自动渲染到邮箱输入框下方的错误区域。
场景2:无效用户单独提示「该账户无效」
需要先验证账号密码正确性,再单独校验valid状态,自定义错误信息返回:
- 打开
app/Http/Controllers/Auth/LoginController.php文件,新增如下方法:
use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\MessageBag; protected function attemptLogin(Request $request) { // 先验证账号密码是否匹配,不校验valid状态 $credentials = $request->only($this->username(), 'password'); if (!Auth::attempt($credentials, $request->filled('remember'))) { return false; } // 账号密码正确后校验valid状态 if (!Auth::user()->valid) { Auth::logout(); // 将错误信息绑定到email字段的错误集合 $request->session()->flash('errors', new MessageBag([ 'email' => '该账户无效' ])); return false; } return true; }
- 你当前的
login.blade.php邮箱模块代码无需做任何修改,@error('email')会自动读取到自定义的$message并渲染。
内容的提问来源于stack exchange,提问作者puss
相关产品推荐
相关产品推荐

