채용 공고 웹사이트: 사용자 인증
20440 단어 opinejavascriptreactwebdev
목차
Sokhavuth TIN ・ 8월 11일 ・ 2분 읽기
GitHub: https://github.com/Sokhavuth/opine-job
데노 배치: https://khmerweb-job.deno.dev/users
Opine 웹 프레임워크에서는 하나의 경로에 대해 다른 처리기와 함께 많은 HTTP 메서드를 사용할 수 있습니다. 예를 들어 미리 정의된 경로 "/users"의 경우 HTTP 요청 메서드 GET 및 POST를 다른 핸들러와 함께 사용하여 다른 결과를 얻을 수 있습니다. 실제로 HTTP GET 방식을 사용하여 브라우저에 로그인 양식을 표시하고 HTTP POST 방식을 사용하여 MongoDB 데이터베이스를 확인하여 로그인 양식을 제출한 사용자가 등록되었는지 여부를 확인할 것입니다. 등록된 경우 사용자 데이터를 Redis 데이터베이스에 저장하고 다가오는 대시보드에 로그인할 수 있습니다. 그렇지 않으면 올바른 이메일과 비밀번호로 로그인 양식을 다시 제출하도록 요청할 것입니다. .
또한 HTTP GET 방식의 경우 사용자가 로그인할 수 있도록 로그인 양식을 바로 보내는 대신 응용 프로그램 세션을 사용하여 Redis 데이터베이스에서 해당 사용자 데이터가 등록되어 있는지 여부를 확인합니다. 사용자 데이터가 등록되어 있으면 이미 인증된 것이므로 로그인 양식을 작성하지 않고도 대시보드에 들어갈 수 있습니다.
// routes/users/login.js
import { Router } from "../../deps.ts";
const router = Router();
import login from "../../controllers/users/login.js";
router.get("/", async (req, res) => {
if(await req.mysession.get("user")){
res.redirect("/users/post");
}else{
login.getForm(req, res);
}
});
router.post("/", (req, res) => {
login.checkUser(req, res);
});
export default router;
// controllers/users/login.js
import { bcrypt } from "../../deps.ts";
import login from "../../views/users/login.jsx";
import userdb from "../../models/user.ts";
class Login{
async getForm(req, res){
const config = req.mysetting();
config.page_title = "Login Page";
config.route = '/users/login';
const html = await login(config);
res.send(html);
}
async checkUser(req,res){
const config = await req.mysetting();
config.page_title = 'Login Page';
const user = await userdb.checkUser(req);
if(user){
if(user.role in {'Admin':1,'Editor':1,'Author':1,"Guest":1}){
if(await bcrypt.compareSync(req.body.password, user.password)){
await req.mysession.set("user", user);
res.redirect('/users/post');
}else{
config.message = 'The password is wrong';
config.route = '/users';
const html = await login(config);
res.send(html);
}
}else if(user.role in {'Subscriber':1}){
config.message = 'You are not registered yet';
config.route = '/users';
const html = await login(config);
res.send(html);
}else{
config.message = 'You are not registered yet';
config.route = '/users';
const html = await login(config);
res.send(html);
}
}else{
config.message = 'The email is wrong';
config.route = '/users';
const html = await login(config);
res.send(html);
}
}
}
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('xxxxxxxxxxx', salt);
let newUser = {
id: id,
title: 'Guest',
content: '',
thumb: '',
date: '',
role: 'Guest',
email: '[email protected]',
password: hashPassword,
}
const users = req.mydb.collection<UserSchema>("users");
await users.insertOne(newUser);
}
async checkUser(req){
const query = {email:req.body.email}
const users = req.mydb.collection<UserSchema>("users");
return await users.findOne(query);
}
}
export default new User();
Reference
이 문제에 관하여(채용 공고 웹사이트: 사용자 인증), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/sokhavuth/job-announcement-website-authenticate-user-4lkp텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)