Задать вопрос
@ytakon

Куки и jwt токен как с этим работать?

У меня есть код, в котором при авторизации я записываю токен в БД и при переходе по страницам его проверяю.
$key = '3e85abb8c6a637267228c94b7f9c2564c68f976ba983837173545afa75b629d1';
$token = array(
'iat' => time(),
'nbf' => time(),
'exp' => time() + 3600,
'data' => array(
'user_id' => $user['id'],
'user_name' => $user['name'],
)
);

$encode = JWT::encode($token, $key, 'HS256');

$update_token_query = "UPDATE `users` SET `token` = '$encode' WHERE `id` = {$user['id']}";
if ($mysqli->query($update_token_query) === TRUE) {
setcookie("token", $encode, time() + 3600, "/", "", true, true); // Встановлення HTTPOnly куки
} else {
echo "Помилка при оновленні токену: " . $mysqli->error;
}

$mysqli->close();
$decode = JWT::decode($encode, new Key($key, 'HS256'));
echo $encode;
echo $decode->data->user_id; // Виведе 'stas'
echo $decode->data->user_name; // Виведе 'stanislav'
header('Location:welcome.php');
exit(); на след странице я его проверяю // require 'vendor/autoload.php';
use Firebase\JWT\JWT;
use Firebase\JWT\Key;

$mysqli = new mysqli('localhost', 'root', '', 'register-bd');

if ($mysqli->connect_error) {
die('Помилка підключення до бази даних: ' . $mysqli->connect_error);
}

$result = $mysqli->query("SELECT token FROM users"); 
if ($result) {
$row = $result->fetch_assoc();
if ($row) {
$token = $row['token'];
echo $token;
$key = '3e85abb8c6a637267228c94b7f9c2564c68f976ba983837173545afa75b629d1';
try {
$decode = JWT::decode($token, new Key($key, 'HS256'));
echo $decode->data->user_id; 
echo $decode->data->user_name; 

$user_id_from_token = $decode->data->user_id;
$user_name_from_token = $decode->data->user_name;

$sql = "SELECT * FROM `users` WHERE `id` = '$user_id_from_token' AND `name` = '$user_name_from_token'";
$result = $mysqli->query($sql);

if ($result->num_rows > 0) {
echo 'данні співпали';
return, щоб продовжити виконання скрипта
} else {
echo 'данні не співпали';
}
} catch (Exception $e) {
echo 'Помилка декодування токену: ' . $e->getMessage();
}
} else {
echo "Рядок з токеном не знайдено";
}
} else {
echo "Помилка виконання запиту до бази даних: " . $mysqli->error;
}

$mysqli->close();
и далее идёт загрузка страницы и тд тп, но это лишние движения, как реализовать запись токена в куки? и проверку его на след страницах??? и я проверял этот учаток кода куки не работает вообще setcookie("token", $encode, time() + 3600, "/", "", true, true);
  • Вопрос задан
  • 265 просмотров
Подписаться 1 Простой 7 комментариев
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Рабочий JWT в базе не хранится. Он отдаётся клиенту и предъявляется при каждом запросе к серверу. Защитой служит цифровая подпись токена (третий фрагмент), закрытый ключ которой известен только серверу, выдавшему токен.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 160 000 до 250 000 ₽
BGStaff Москва
До 300 000 ₽
Greenway Global Новосибирск
от 150 000 до 250 000 ₽