Laravel PlainTextToken имеет значение NULL при перечислении токенов

Я играю с Laravel и Sanctum. Я пытаюсь использовать первый токен пользователя в javascript, но Laravel не хочет конвертировать его в PlainTextToken, он выдает мне ноль.

@auth
    @dump(Auth::user()->tokens->first()->plainTextToken) # null
    @dump(Auth::user()->tokens->first()->token) # hexadecimal token
@endauth

Это ошибка или особенность?

🤔 А знаете ли вы, что...
Laravel включает в себя инструменты для тестирования приложений.


50
1

Ответ:

Решено

Когда вы генерируете токен с помощью метода 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документации.