Публикации - Аутентифиация пользователей в Node.js с использованием JWT и Laravel

JWT-аутентификация в Laravel

Обновляем модель User.

Для начала нужно имплементировать контракт Tymon\JWTAuth\Contracts\JWTSubject, который обязует реализовать два метода getJWTIdentifier() и getJWTCustomClaims().

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 переключаем драйвер guards api на jwt

'defaults' => [
    'guard' => 'web',
    'passwords' => 'users',
],

...

'guards' => [
    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ],
],

Создаем следующие маршруты:

 Route::get('auth/login', 'AuthController@login');
 Route::get('auth/logout', 'AuthController@logout');
 Route::get('auth/token', 'AuthController@token');
 Route::get('auth/me', 'AuthController@me');
 Route::get('auth/tokenid', 'AuthController@tokenId');

Контроллер AuthController:


namespace App\Http\Controllers;

use Auth;
use App\Http\Controllers\Controller;

class AuthController extends Controller
{

    public function login()
    {
        $credentials = request(['email', 'password']);

        if (! $token = auth('web')->attempt($credentials)) {
            return response()->json(['error' => 'Unauthorized'], 401);
        }

        return $this->respondWithToken($token);
    }
    public function me()
    {
        return response()->json(auth('web')->user());
    }

    public function token()
    {
        return response()->json(auth('web')->user()->getRememberToken());
    }

    public function tokenId(){

        if (! $token = auth('api')->tokenById(Auth::user()->id)) {
            return response()->json(['error' => 'Unauthorized'], 401);
        }

        return $this->respondWithToken($token);
    }

    public function logout()
    {
        auth()->logout();
        return response()->json(['user'=>'logout']);
    }


    protected function respondWithToken($token)
    {
        return response()->json([
            'access_token' => $token,
            'token_type' => 'bearer',
            'expires_in' => auth('api')->factory()->getTTL() * 60
        ]);
    }
}

Прежде чем переходить к тестированию, иногда требуется обнулить кэш и маршруты:

php artisan config:cache
php artisan route:clear
php artisan cache:clear

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться