Я играю с Laravel и Sanctum. Я пытаюсь использовать первый токен пользователя в javascript, но Laravel не хочет конвертировать его в PlainTextToken, он выдает мне ноль.
@auth
@dump(Auth::user()->tokens->first()->plainTextToken) # null
@dump(Auth::user()->tokens->first()->token) # hexadecimal token
@endauth
Это ошибка или особенность?
Когда вы генерируете токен с помощью метода 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
документации.
Точно исходя из ваших предпочтений и варианта использования, вам нужно выбрать, как вы собираетесь использовать Sanctum
. Для SPA
вы можете использовать встроенные в Laravel службы аутентификации сеансов на основе файлов cookie. И да, вам необходимо защитить маршруты с помощью промежуточного программного обеспечения. Но для SPA
Sanctum для этого используется защита веб-аутентификации Laravel. В зависимости от варианта использования вам нужно выбрать его.
Хорошо, я не могу перечислить токены пользователей в удобной для использования форме. Я хотел войти в веб-интерфейс со своими учетными данными и использовать клиент JavaScript для доступа к API в текущем сеансе. Он мне написал 401, потому что ожидает токен. Я где-то читал, что святилище можно использовать как для входа в систему на основе сеанса, так и для генерации токенов. Возможно, мне нужно использовать промежуточное программное обеспечение Sancum как для веб-маршрутов, так и для API-маршрутов, я не знаю.