понедельник, 18 сентября 2017 г.

Соцсеть. Куки и токен. Урок 5.

Куки для логина.


Создадим таблицу login_tokens в БД.
id int(11) unsigned primary AI
token varchar(64) unique
user_id in(11) unsigned

Создадим связь между таблицами login_tokens и users.
user_id из таблицы login_tokens связан с таблицей users и колонкой id.

Ссылка на видео, о том, как устанавливать связи https://www.youtube.com/watch?v=2EmdP8sn_Aw

Идем в login.php и устанавливаем куки.

openssl_random_pseudo_bytes — Generate a pseudo-random string of bytes

openssl_random_pseudo_bytes(64); // кол-во байт 64
Если он будет передан в функцию, это будет содержать логическое значение, определяющее, был ли используемый алгоритм «криптографически сильным», например, безопасным для использования с GPG, паролями и т. Д. ИСТИНА, если это так, иначе FALSE

bin2hex — Преобразует бинарные данные в шестнадцатеричное представление

<?php
ob_start(); // от ошибки
include('classes/DB.php');
if(isset($_POST['login'])) {
$username = $_POST['username'];
$password = $_POST['password'];
if (DB::query('SELECT username FROM users WHERE username=:username', array(':username'=>$username))) {

if (password_verify($password, DB::query('SELECT password FROM users WHERE username=:username', array(':username'=>$username))[0]['password'])) {
echo 'Logged in!';
// при входе на сайт мы генерируем токен
$cstrong = true;
$token = bin2hex(openssl_random_pseudo_bytes(64, $cstrong)); // мы генерируем 64 байта, вторым параметром передается только переменая
// echo $token; // 3df3d89336887cd8701b391ab5a8cd1b81205dcd1b9f51ed4d15815690cda971b19685bea37632c17d895bef95d2076c1d463697757a301828791ce1061ef43b
$user_id = DB::query('SELECT id FROM users WHERE username=:username', array(':username'=>$username))[0]['id'];
DB::query('INSERT INTO login_tokens VALUE (:id, :token, :user_id)', array(':id'=>null, ':token'=>sha1($token), ':user_id'=>$user_id));
setcookie("SNID", $token, time() + 60 * 60 * 24 * 7, '/', NULL, NULL, TRUE);
} else {
echo 'Incorrect Password!';
}

} else {
echo 'User not registered!';
}
}
?>

<h1>Login to your account</h1>
<form action="login.php" method="post">
<input type="text" name="username" placeholder="Username..."/> </p>
<input type="password" name="password" placeholder="Password..."/> </p>
<input type="submit" name="login" value="Login"/>

</form>

Комментариев нет:

Отправить комментарий

Materialize-css. Футер

Сделаем футер и прижмем к низу страницы. Документация: https://materializecss.com/footer.html