#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, чем другие параллельные библиотеки.