Добавьте роль пользователя в jwt, laravel 5 jwt-auth
У меня есть сервер laravel 5, который отправляет JWT-токен в качестве ответа json при входе в систему с помощью jwt-auth.
Теперь я хотел бы добавить роль пользователя к токену jwt, который отправляет laravel, я попробовал следующим образом:
Это мой текущий контроллер
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppHttpControllersController;
use JWTAuth;
use TymonJWTAuthExceptionsJWTException;
use IlluminateDatabaseEloquentModel;
use AppUser;
class AuthenticateController extends Controller
{
public function authenticate(Request $request)
{
// grab credentials from the request
$credentials = $request->only('email', 'password');
$user = User::where('email', '=', $credentials['email'])->first();
$customClaims = ['role' => $user->role];
try {
// attempt to verify the credentials and create a token for the user
if (! $token = JWTAuth::attempt($credentials, $customClaims)) {
return response()->json(['error' => 'invalid_credentials'], 401);
}
} catch (JWTException $e) {
// something went wrong whilst attempting to encode the token
return response()->json(['error' => 'could_not_create_token'], 500);
}
// all good so return the token
return response()->json(compact('token'));
}
}
?>
Есть ли более чистый способ сделать это ?
3 ответов:
В настоящее время вы дважды запрашиваете пользователя, один раз используя электронную почту для получения роли, а второй-в рамках метода
jwt::attempt().Я бы предложил сократить запросы до одного, но сделать аутентификацию {Auth:: attempt($credientials)}, а затем передача извлеченного пользователя в МетодJWT::fromUser()вместе с пользовательским утверждением. ИтакJWT::fromUser($user,['role' => $user->role])
Странно, что указание некоторых $customClaims в качестве второго параметра для метода attempt() на самом деле работает для меня.
Однако, вы пробовали использовать фасад JWTFactory? Он позволяет создавать все типы токенов, которые вы хотите.
Вы можете получить дополнительную информацию здесь: JWT-Auth Creating Tokens Page.
Как предлагает руководство по установке , не забудьте добавить его в качестве фасада при установке JWT-Auth!
Надеюсь, это поможет!
Comments