You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:45:06