Проблема с воздушным шлюзом laravel при создании токенов: 'tokenable_id' не может быть нулевым
Обновились до Laravel 7 и установили Laravel/Airlock.
Следуя инструкциям по установке, при попытке создать токен выдает ошибку
SQLSTATE[23000]: нарушение ограничения целостности: 1048 Столбец 'tokenable_id' не может быть пустым (SQL: вставить в
personal_access_tokens
(name
,token
,abilities
,tokenable_id
,tokenable_type
,updated_at
,created_at
) значения (api-token, 31afd4da089878bd2cd562264bd2d8c789c7a1f91e47f6c3969bce2fc19a7329, ["order:create","order:view","WLR3:check_availability"],?, App\Models\User:05, 2020-03-06 03-06 10:44:05))
в моем TokenController.php у меня есть:
public function create(User $user, Request $request)
{
$token_name = $request->input('token_name', 'api-token');
$abilities = $request->input('abilities', [
'order:create',
'order:view',
'WLR3:check_availability'
]);
$token = $user->createToken($token_name, $abilities);
return $this->view($user, $request);
}
Что я пропустил, что могло вызвать эту ошибку?
В модели пользователя он начинается с:
use Laravel\Airlock\HasApiTokens;
class User extends Authenticatable /* implements MustVerifyEmail */
{
use HasRoles, HasApiTokens, Notifiable;
protected $guard_name = 'web';
1 ответ
Ошибка новичка... Похоже, что $user, созданный при внедрении зависимости, был недействительным.
Мне нужно добавить:
$user = Auth::user();
в метод create, поэтому теперь он читается как:
public function create(Request $request)
{
$user = Auth::user();
$token_name = $request->input('token_name', 'api-token');
$abilities = $request->input('abilities', [
'order:create',
'order:view',
'WLR3:check_availability'
]);
$token = $user->createToken($token_name, $abilities);
return $this->view($user, $request);
}
теперь это работает!