JWT auth laravel 上的 invalid_credentials

Posted

技术标签:

【中文标题】JWT auth laravel 上的 invalid_credentials【英文标题】:invalid_credentials on JWT auth laravel 【发布时间】: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'));

【问题讨论】:

【参考方案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】:

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

【讨论】:

以上是关于JWT auth laravel 上的 invalid_credentials的主要内容,如果未能解决你的问题,请参考以下文章

laravel安装jwt-auth及验证(实例)

laravel安装jwt-auth及验证(实例)

Laravel 6 中包 tymondesigns/jwt-auth 安装问题

Laravel 7.0 - tymon/jwt-auth - 检查令牌是不是有效

Auth0 Laravel 获取 JWT 令牌

如何使用 Laravel 5 设置 JWT-Auth