Это очень простая авторизация для вашего сайта. Существует множество опций, которые вы можете настроить.
Подключите библиотеку как
const GraphicExpressAuthorization = require('graphic-express-authorization');
const users = {
"Ivan": "PyftimKbNsGenm&"
};
// authorization функция должна возвращать полезную нагрузку с указанием login или null или error для отображения
const {graphicExpressAuthorization, router, identification} = new GraphicExpressAuthorization({
authorization: function authorization(login, password) { // Функция для верефикации пароля. Может быть async
if(!users[login]) return null;
if(users[login] === password) return {login, payload: "123", payload2: "123"};
return null;
//or
return {error: "Не верен логин или пароль"};
},
bruteforce:{ // Опционально
delay: 5000 // Задержка перед следующим вводом пароля, если он оказался не верен
},
htmlPath: null, // Путь к твоему собственному HTML. Подробнее ниже
jwt: {
privateKey:require('crypto').randomBytes(512).toString("hex"),
payload: ["payload", "payload2"], // Разрешает эту нагрузку для JWT (Если нет, но будет перезаписана при перевыдаче)
// publicKey: publicKey, // Публичный ключ для асинхронных методов шифрования
timeToRecreateToken: 600, //Время которое остаётся после чего, будет выдан новый
genConfig: { // Конфиг для передачи в JWT включая алогоритмы и время жизни
algorithm: "HS256",
expiresIn: '2h'
}
},
cookie: { // Опционально. Настройки куки для токена
path: '/',
secure: true,
httpOnly: true,
sameSite: 'Strict'
},
authPath:"/api/" // Должен быть точно таким-же для express
});
Следующий шаг - подключить роутер к приложению express. Важно, чтобы пути совпадали. (путь аутентификации и путь маршрутизатора api)
const express = require('express');
const app = express();
const cookieParser = require('cookie-parser');
app.use("/api/", router); // Должен быть точно таким-же для GEA
app.get("/enter", cookieParser(), identification, (req,res)=>{ // identification не желателен в глобальном поле ( app.use(identification ))
res.json({ message: 'WELCOME'});
});
app.listen(3000, () => {
console.log(
` ┍━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┑` + "\n"+
` ┝━━┥ Server is started.` + "\n"+
` ┝━━┥ http://localhost:3000/enter` + "\n"+
` ┕━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┙`
);
});
Если тебе нужно использовать свой собственный HTML-код, то нужно указать путь к HTML-файлу в свойстве htmlPath.
Если решите создать свой собственный html-код, нужно будет подключить authentication.js и нужные идентификаторы.
<script src="./authentication.js"></script>
ID должны быть следующими:
#loginButton /* Кнопка входа */
#loginField /* Поле ввода логина ( должен иметь свойство .value ) */
#passwordField /* Поле ввода пароля ( должен иметь свойство .value ) */
#statusField /* Это поле будет меняться в зависимости от статуса входа (в том числе {error}). Опционален. */
const {graphicExpressAuthorization, router, identification} = new GraphicExpressAuthorization({
authorization: async function authorization(login, password) {
const [rows] = await db.query('SELECT * FROM users WHERE login = ?', [login]);
if(rows.length === 0) return {error: "Такого имени пользователя не найдено"};
const user = rows[0];
if(user.password === sha512(password)) return {login};
return {error: "Пароль не верен"};
},
bruteforce:{
delay: 5000
},
jwt: {
privateKey: require('crypto').randomBytes(512).toString("hex"),
timeToRecreateToken: 600,
genConfig: {
algorithm:"HS256",
expiresIn: '12h'
}
},
authPath:"/authApi/"
});
app.use("/authApi/", router);
const User = mongoose.model('User');
const {graphicExpressAuthorization, router, identification} = new GraphicExpressAuthorization({
authorization: async function authorization(login, password) {
const user = await User.findOne({ login });
if (!user) return { error: "Такого имени пользователя не найдено" };
if (user.password === sha512(password)) return { login };
return { error: "Пароль не верен" };
},
bruteforce:{
delay: 60000
},
jwt: {
privateKey: require('crypto').randomBytes(512).toString("hex"),
timeToRecreateToken: 600,
genConfig: {
algorithm:"HS256",
expiresIn: '12h'
}
},
authPath:"/api/"
});
app.use("/api/", router);
Теги: Node, JS, Node.js, JavaScript, Web, Express, GUI, UI