У меня есть бэкэнд laravel 5, который отправляет jwt-токен как ответ json при входе в систему с JWT-авт.
Теперь я хотел бы добавить роль пользователя в токен jwt, который отправляет laravel, я попробовал следующий способ:
Это мой текущий контроллер
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;
use Illuminate\Database\Eloquent\Model;
use App\User;
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'));
}
}
?>
Есть ли более чистый способ сделать это?
В настоящее время вы запрашиваете пользователя дважды: один раз, используя электронную почту для получения роли, а второй — в jwt::attempt()
Я бы предложил сократить количество запросов до одного, но выполнить аутентификацию {Auth :: try ($ credientials)}, а затем
передача извлеченного пользователя в JWT::fromUser()
метод, наряду с таможенной претензией. так
JWT::fromUser($user,['role' => $user->role])
Странно, указав некоторые $ customClaims в качестве второго параметра для попытка () метод на самом деле работает для меня.
Тем не менее, вы пытались использовать JWTFactory Фасад? Это позволяет вам создавать любой вид токена, который вы хотите.
Вы можете получить больше информации здесь: JWT-Auth Страница создания токенов.
Как руководство по установке предлагает, не забудьте добавить его как фасад при установке JWT-Auth!
Надеюсь, поможет!
Кажется, что в текущей стабильной версии JWTAuth нет более чистого пути [0.5.9].
Взгляните на следующие вопросы # 89 # 108
Как отметил автор в своих комментариях, в его следующем выпуске будут исправления, касающиеся этой проблемы. Вы можете взглянуть на его ветку разработки.
JWT v1.0
Документация вызывает путаницу.
Добавьте этот метод в вашу модель пользователя, чтобы вы могли добавлять пользовательские утверждения при аутентификации пользователей:
public function getJWTCustomClaims()
{
return = [
'type' => 'driver',
'id' => $this->driver->id
];
}