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

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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документации.

Хорошо, я не могу перечислить токены пользователей в удобной для использования форме. Я хотел войти в веб-интерфейс со своими учетными данными и использовать клиент JavaScript для доступа к API в текущем сеансе. Он мне написал 401, потому что ожидает токен. Я где-то читал, что святилище можно использовать как для входа в систему на основе сеанса, так и для генерации токенов. Возможно, мне нужно использовать промежуточное программное обеспечение Sancum как для веб-маршрутов, так и для API-маршрутов, я не знаю.

inf3rno 23.08.2024 11:43

Точно исходя из ваших предпочтений и варианта использования, вам нужно выбрать, как вы собираетесь использовать Sanctum. Для SPA вы можете использовать встроенные в Laravel службы аутентификации сеансов на основе файлов cookie. И да, вам необходимо защитить маршруты с помощью промежуточного программного обеспечения. Но для SPA Sanctum для этого используется защита веб-аутентификации Laravel. В зависимости от варианта использования вам нужно выбрать его.

Subha 23.08.2024 12:00

Другие вопросы по теме