При отправке телефона на бекенд можно делать запись в БД вида
{
"id": "uuid,
"challenge": "random string",
"otp": "six-digit code", // для otp бессмысленно использовать bcrypt, потому что этот код одноразовый и у него малое время жизни
"expires_in": timestamp
}
После отправить otp пользователю и записать challenge в cookie
При отправке otp на бекенд нужно достать challenge из cookie, найти по этому challenge запись в базе и сверить код