
Оглавление
Sokhavuth TIN ・ Aug 11 ・ 2 min read
GitHub: https://github.com/Sokhavuth/opine-job
Deno Deploy: https://khmerweb-job.deno.dev/users
Логин — это процесс проверки или аутентификации определенных зарегистрированных пользователей для того, чтобы они могли попасть на некоторые запрещенные страницы. В результате, прежде всего, нам нужно зарегистрировать этих специальных пользователей в базе данных, чтобы, когда они попытаются войти на приборную панель или другие запрещенные страницы, мы могли проверить в базе данных, зарегистрированы они или нет. Если они зарегистрированы, мы можем написать код, который позволит им попасть в эти запрещенные области, в противном случае — нет.
Прежде чем достичь этой цели, нам необходимо создать коллекцию пользователей в базе данных MongoDB для регистрации суперпользователя или менеджера, чтобы он мог регистрировать других специальных пользователей и управлять приборной панелью.
С другой стороны, для безопасности паролей пользователей мы можем использовать пакет bcrypt для хэширования паролей пользователей, чтобы никто не мог прочитать и понять эти пароли, даже администратор(ы) сайта. Вот пример хэшированного пароля: $2a$08$zuHtXr2ITSIHYfLL/kaj9uo7XTZiL/rNJV0jdJB/7HIHFmuSGWb7C.
// controllers/users/login.js
import login from "../../views/users/login.jsx";
import userdb from "../../models/user.ts";
class Login{
async getForm(req){
const config = req.mysetting();
config.page_title = "Login Page";
config.route = '/users/login';
userdb.createRootUser(req);
return await login(config);
}
}
export default new Login();
// models/users.ts
import { bcrypt } from '../deps.ts';
interface UserSchema {
_id: ObjectId;
id: string;
title: string;
content: string;
thumb: string;
date: string;
role: string;
email: string;
password: string;
}
class User{
async createRootUser(req){
const id = Date.now() + Math.round(Math.random() * 1E9).toString();
const salt = await bcrypt.genSalt(8);
const hashPassword = bcrypt.hashSync('xxxxxxxxx', salt);
let newUser = {
id: id,
title: 'Sokhavuth',
content: '',
thumb: '',
date: '',
role: 'Admin',
email: 'vuthdevelop@gmail.app',
password: hashPassword,
}
const users = req.mydb.collection<UserSchema>("users");
await users.insertOne(newUser);
}
}
export default new User();