laravel 5.5 не поддерживает jwt auth lib

#laravel #laravel-5.5 #jwt-auth

#laravel #laravel-5.5 #jwt

Вопрос:

Я новичок в Laravel и использую JWT auth в laravel 5.5.18, но у меня это не работает, выдает ошибку при входе в api Interface 'TymonJWTAuthContractsJWTSubject' not found"

Может ли кто-нибудь помочь мне, как это исправить.

Спасибо

Комментарии:

1. Я проверил в Google, что он предлагает мне обновить jwt lib, но он также не работает, когда я использовал composer update для зависания….

2. какая версия tymondesigns/jwt-auth ?

3. «tymon / jwt-auth»: «^1.0.0-beta.3@dev »

4. убедитесь, что у вас есть <project>/vendor/tymon/src/ … а затем также запустите composer dump-auto — просто чтобы убедиться, что у вас есть файлы и они загружаются автоматически.

5. вы можете использовать tha laravel/passport и для удаления пакета из приложения composer remove vendor/package

Ответ №1:

Обновлена статья и исходный код — www.ultimateakash.com

 composer remove tymon/jwt-auth
composer dump-autoload
  

затем установите

 composer require tymon/jwt-auth:dev-develop --prefer-source
  
 php artisan vendor:publish --provider="TymonJWTAuthProvidersLaravelServiceProvider"
  
 php artisan jwt:secret
  
 Route::post('login', 'ApiController@login');
Route::post('register', 'ApiController@register');

Route::group(['middleware' => 'auth.jwt'], function () {
    Route::get('logout', 'ApiController@logout');
    Route::get('user', 'ApiController@getAuthUser');

});
  
 ?php
 
namespace App;
 
use IlluminateFoundationAuthUser as Authenticatable;
use IlluminateNotificationsNotifiable;
use TymonJWTAuthContractsJWTSubject;
 
class User extends Authenticatable implements JWTSubject
{
    use Notifiable;
 
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];
 
    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
 
    /**
     * 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 [];
    }
}
  
 <?php
namespace AppHttpControllers;
use AppUser;
use IlluminateHttpRequest;
use JWTAuth;
use TymonJWTAuthExceptionsJWTException;
 
class ApiController extends Controller
{
    public function register(Request $request)
    {
        $user = new User;
        $user->name = $request->name;
        $user->email = $request->email;
        $user->password = bcrypt($request->password);
        $user->save();
 
        return response()->json([
            'success' => true,
            'data' => $user
        ], 200);
    }
 
    public function login(Request $request)
    {
        $input = $request->only('email', 'password');
        $jwt_token = null;
 
        if (!$jwt_token = JWTAuth::attempt($input)) {
            return response()->json([
                'success' => false,
                'message' => 'Invalid Email or Password',
            ], 401);
        }
 
        return response()->json([
            'success' => true,
            'token' => $jwt_token,
        ]);
    }
 
    public function logout(Request $request)
    {
        $this->validate($request, [
            'token' => 'required'
        ]);
 
        try {
            JWTAuth::invalidate($request->token);
 
            return response()->json([
                'success' => true,
                'message' => 'User logged out successfully'
            ]);
        } catch (JWTException $exception) {
            return response()->json([
                'success' => false,
                'message' => 'Sorry, the user cannot be logged out'
            ], 500);
        }
    }
 
    public function getAuthUser(Request $request)
    {
        $this->validate($request, [
            'token' => 'required'
        ]);
 
        $user = JWTAuth::authenticate($request->token);
 
        return response()->json(['user' => $user]);
    }
}
  

Комментарии:

1. Я выполнил все эти шаги и получил библиотеку в папке поставщика, установил ключ, но все же он выдает мне ошибку интерфейса ‘Tymon JWTAuth Contracts JWTSubject’not found», поэтому мне нужно удалить старый и снова запустить тот же процесс, как я могу удалить его, выполнив любую команду или просто выполнив вручнуюили использовал команду прямого композитора, пожалуйста, предложите мне

2. используйте composer для удаления tymon / jwt-auth

3. Большое вам спасибо. Это не для вашего поста здесь, я собирался буквально отказаться от использования Laravel. Также здесь приведен хороший рабочий пример использования Laravel 5.7 — blog.pusher.com/laravel-jwt

Ответ №2:

Вы можете рассмотреть возможность использования Laravel Passport

Из официальных документов laravel: https://laravel.com/docs/5.8/passport

Laravel упрощает аутентификацию API с помощью Laravel Passport, который обеспечивает полную реализацию сервера OAuth2 для вашего приложения Laravel за считанные минуты. Passport построен поверх сервера League OAuth2, который поддерживается Энди Миллингтоном и Саймоном Хэмпом.

Действительно, поскольку библиотека поддерживается создателем Laravel, она будет более актуальной и стабильной для Laravel, чем другие параллельные библиотеки.