Я играю с Laravel и Sanctum. Я пытаюсь использовать первый токен пользователя в javascript, но Laravel не хочет конвертировать его в PlainTextToken, он выдает мне ноль.
@auth
@dump(Auth::user()->tokens->first()->plainTextToken) # null
@dump(Auth::user()->tokens->first()->token) # hexadecimal token
@endauth
Это ошибка или особенность?
🤔 А знаете ли вы, что...
Laravel включает в себя инструменты для тестирования приложений.
Когда вы генерируете токен с помощью метода createToken()
, он возвращает экземпляр Laravel\Sanctum\NewAccessToken
.
Токены API хешируются с использованием хеширования SHA-256
перед сохранением в вашей базе данных, но вы можете получить доступ к значению plain-text
токена, используя свойство plainTextToken
экземпляра NewAccessToken
.
Вы должны отобразить это значение в user
сразу после того, как токен будет создан таким образом.
use Illuminate\Http\Request;
Route::post('/tokens/create', function (Request $request) {
$token = $request->user()->createToken($request->token_name);
return ['token' => $token->plainTextToken];
});
Вы получаете это значение NULL
, потому что применяете plainTextToken
к сохраненному в БД значению токена, которое уже хешировано с использованием SHA-256
.
Дополнительную информацию можно найти в разделе Issuing API Tokens
документации.