Задача: послать на фронт JWT, у которого будет задана роль в payload.
Сейчас это реализовано костыльно и небезопасно.
Есть ли идеи, как можно это правильно организовать?
AuthControllerpublic function login(LoginRequest $request)
{
$client = Client::query()->where('password_client', 1)->first();
$response = Http::asForm()->post(url('/').'/oauth/token', [
'grant_type' => 'password',
'client_id' => $client->id,
'client_secret' => $client->secret,
'username' => $request->email,
'password' => $request->password,
'scope' => $request->role,
]);
if ($response->status() === 200) {
return response()->json([
'access_token' => $response['access_token'],
])->withCookie('refresh_token', $response['refresh_token'], 86400);
}
return $this->baseJson(success: false, message: ResponseHelper::error(__('auth.failed')), status: 400);
}
LoginRequestpublic function rules()
{
return [
'email' => ['required', 'email', 'exists:users,email', 'max:255'],
'password' => ['required', 'string', 'min:8', 'max:32'],
'remember_me' => ['nullable', 'boolean'],
'role' => ['required'],
];
}
protected function prepareForValidation()
{
$this->merge([
'role' => User::query()->where('email', $this->email)->get()->value('role') ?: User::USER,
]);
}
Сейчас в
$response['refresh_token'] возвращается следующая информация:
{
"aud": "2",
"jti": "c8298b6c80a85db3241a80f377586495da1718a5f31a23abb9bed000bf6e96de1ca47d8b3f465b91",
"iat": 1666809913.839331,
"nbf": 1666809913.839332,
"exp": 1666811713.828701,
"sub": "2",
"scopes": [
"owner"
]
}
Варианты:
1. Ответ не меняется, но подход должен быть не через request, как сейчас.
2. Добавляется новое поле role, равно роли пользователя (строка).