Laravel 8 API登录系统如何新增用户status字段校验
实现方案
你可以通过以下两种方式实现status字段的校验,第一种改动最小最适合入门场景:
方法1:直接在登录凭证中加入status校验
Laravel内置的auth()->attempt()方法支持传入额外的查询条件,你只需要修改login方法里的$credentials参数,新增status字段的过滤即可:
public function login(Request $request) { // 直接在凭证中加入status=1的校验规则 $credentials = request(['email', 'password']) + ['status' => 1]; if (! $token = auth()->attempt($credentials)) { return response()->json(['error' => '账号密码错误或账号未激活'], 401); } return $this->respondWithToken($token, $request->email); }
这个方案的逻辑是:尝试登录时会同时校验邮箱、密码、status三个字段的值,只要有一个不匹配就会返回登录失败,不需要额外写其他查询逻辑。
方法2:分步骤校验,返回不同的错误提示
如果你需要区分「账号密码错误」和「账号未启用」两种错误场景,可以单独查询用户再分步校验:
public function login(Request $request) { $credentials = request(['email', 'password']); // 先根据邮箱查询用户 $user = \App\Models\User::where('email', $credentials['email'])->first(); // 校验用户是否存在 if (!$user) { return response()->json(['error' => '账号不存在'], 401); } // 校验status状态 if (!$user->status) { return response()->json(['error' => '账号已被禁用,请联系管理员'], 401); } // 最后校验密码 if (! $token = auth()->attempt($credentials)) { return response()->json(['error' => '密码错误'], 401); } return $this->respondWithToken($token, $request->email); }
注意事项
你当前注册方法里注释的代码有一个小问题:你的users表status字段是boolean类型,但是注释代码里赋值的是字符串'Active',实际写入数据库会被转为0,导致新注册的用户默认无法登录,需要改成:
$user->status = 1;
内容的提问来源于stack exchange,提问作者tarafikttes
相关产品推荐
相关产品推荐

