I am using 'tymon/jwt-auth' in Laravel 8. I followed the steps exactly as on 'https://jwt-auth.readthedocs.io/en/docs/laravel-installation/', but I still always get 401 Unauthorized.
I cannot figure out the cause of it while debugging in Postman and I am not doing anything different than what the guy in the tutorial was doing. I looked up online and some suspect it could be that the password is not read as an encrypted string (md5). Any thoughts?
AuthController.php:
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if (! $token = $this->guard()->attempt($credentials)) {
return response()->json(['error' => 'Email or Password invalid'], 401);
}
return $this->respondWithToken($token);
}
Inside User Model:
<?php
namespace App;
use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable implements JWTSubject
{
use Notifiable;
// Rest omitted for brevity
/**
* Get the identifier that will be stored in the subject claim of the JWT.
*
* @return mixed
*/
public function getJWTIdentifier()
{
return $this->getKey();
}
/**
* Return a key value array, containing any custom claims to be added to the JWT.
*
* @return array
*/
public function getJWTCustomClaims()
{
return [];
}
}
config/auth.php:
'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],
router/api.php:
Route::group([
'middleware' => 'api',
'namespace' => 'App\Http\Controllers',
'prefix' => 'auth'
], function ($router) {
Route::post('login', 'AuthController@login');
Route::post('logout', 'AuthController@logout');
Route::post('refresh', 'AuthController@refresh');
Route::post('me', 'AuthController@me');
});
CodePudding user response:
I had to use bcrypt format in the password field instead of md5.