【问题标题】:invalid_credentials on JWT auth laravelJWT auth laravel 上的 invalid_credentials
【发布时间】:2018-10-06 05:04:16
【问题描述】:

我正在使用 jwt-auth for auth API 和 laravel 并编写以下代码。

我的注册 API 运行良好错误我的登录 API 返回 invalid_credentials 错误。 为什么?

laravel 版本:5.4

public function login(Request $request) {

    $credentials = $request->only('username', 'password');

    try {
        $token = JWTAuth::attempt($credentials);
        if (!$token) {
            return response()->json(['error' => 'invalid_credentials'], 401);
        }
    } catch (JWTException $e) {
        return response()->json(['error' => 'could_not_create_token'], 400);
    }

    return response()->json(compact('token'), 200);
}

public function register(Request $request) {

    $credentials = $request->only('email', 'username', 'password', 'name');

    $validator = Validator::make($credentials, [
        'name' => 'required|max:80',
        'username' => 'required|max:80|unique:users',
        'email' => 'required|email|max:255|unique:users',
        'password' => 'required|min:6',
    ]);

    if ($validator->fails()) {
        $errors = $validator->errors();
        return response()->json(['error' => array(
            'name'     => $errors->first('name'),
            'email'    => $errors->first('email'),
            'username'    => $errors->first('username'),
            'password' => bcrypt('password'),
        )], 400);
    }

    $user = User::create([
        'name'      => $request->name,
        'email'     => $request->email,
        'username'  => $request->username,
        'password'  => $request->password,
    ]);

    $token = JWTAuth::fromUser($user);
    return response()->json(compact('token'));
}

【问题讨论】:

    标签: php laravel authentication jwt


    【解决方案1】:

    使用email 代替username。 Laravel 使用 email 列,JWTAuth 也遵循此列。

     $credentials = $request->only('email', 'password');
    

    要将用户名列更改为username,您需要在控制器中更改username 函数。

    查看来自github JWTAuth的示例

    【讨论】:

    • 可以尝试使用 `Hash::make` 我代替 `bcrypt` 进行新注册
    • 更新你当前的代码和视图部分?
    • 哦,我在我的代码中发现了一个错误。我在验证中执行 bcrypt,而我对用户创建一无所知。我纠正了这个问题,它对我有用
    • 我已经发布了我的答案
    • 但是如果$validator->fails() 有有效的凭据会怎样?
    【解决方案2】:

    我尝试了任何解决方案但都不起作用,然后再次检查我的代码并在我的代码中发现错误。我在验证中进行 bcrypt,而在用户创建中没有任何内容。更正了这一点,它对我有用。

    public function login(Request $request) {
    
        $credentials = $request->only('username', 'password');
    
        try {
            $token = JWTAuth::attempt($credentials);
            if (!$token) {
                return response()->json(['error' => 'invalid_credentials'], 401);
            }
        } catch (JWTException $e) {
            return response()->json(['error' => 'could_not_create_token'], 400);
        }
    
        return response()->json(compact('token'), 200);
    }
    
    public function register(Request $request) {
    
        $credentials = $request->only('email', 'username', 'password', 'name');
    
        $validator = Validator::make($credentials, [
            'name' => 'required|max:80',
            'username' => 'required|max:80|unique:users',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|min:6',
        ]);
    
        if ($validator->fails()) {
            $errors = $validator->errors();
            return response()->json(['error' => array(
                'name'     => $errors->first('name'),
                'email'    => $errors->first('email'),
                'username'    => $errors->first('username'),
                'password' => $errors->first('password'),
            )], 400);
        }
    
        $user = User::create([
            'name'      => $request->name,
            'email'     => $request->email,
            'username'  => $request->username,
            'password'  => bcrypt($request->password),
        ]);
    
        $token = JWTAuth::fromUser($user);
        return response()->json(compact('token'));
    }
    

    【讨论】:

      【解决方案3】:

      在我的情况下,这个错误是因为我的表中有重复的电子邮件:(

      【讨论】:

        猜你喜欢
        • 2017-05-11
        • 1970-01-01
        • 2018-03-30
        • 2017-06-10
        • 2016-10-20
        • 1970-01-01
        • 2018-02-11
        • 2020-05-11
        • 1970-01-01
        相关资源
        最近更新 更多