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 6 中包 tymondesigns/jwt-auth 安装问题