노드 서버에서 로그인과 회원가입을 처리하는 router를 만들었다. /login 경로에서 로그인과 회원가입을 동시에 처리할 수 있도록 구성하였다.
- 로그인시
- 기본적인 null 체크
- mongoose에서 id와 password를 비교한 뒤 맞는 경우, 성공 메시지를 출력
- 회원가입시
- 기본적 null 체크
- email 형식체크(emailCheck함수)
- mongoose에서 req.body 데이터를 적절한 구조로 만들어 저장
1. 라우터 소스
데이터베이스의 모델은 자유롭게 스키마를 변경할 수 있도록 {strict:false} 옵션을 사용했고, 데이터베이스상에 users 객체가 있는 경우와 없는 경우 동시에 사용할 수 있도록 user_model 변수를 생성
const mongoose = require('mongoose');
const { Schema } = mongoose;
const user_model = mongoose.models['user']||
mongoose.model('user', new Schema({_id:String, pw:String,
email:String},
{ strict: false }));
router.post('/login', async(req, res) => {
if(req.body.userid=='') res.json({isLogin: false, state: 'error',
message:'Username is null !'})
if(req.body.password=='') res.json({isLogin: false, state: 'error',
message:'Password is null !'})
if(req.body.type=='signin'){
var result = await user_model.find({_id: req.body.userid,
pw: req.body.password})
if(result.length==0){
res.json({isLogin: false, state: 'error',
message:'User does not exists or<Br> Password does not match !'})
}else if(result.length==1){
req.session.username = req.body.userid;
res.json({isLogin:true, state:'success', message:''})
}
}else if(req.body.type=='signup'){
if(req.body.email=='') res.json({isLogin: false, state: 'error',
message:'Email is null !'})
if(req.body.password2=='')
res.json({isLogin: false, state: 'error',
message:'Confirm Password is null !'})
if(req.body.password!=req.body.password2)
res.json({isLogin: false, state: 'error',
message:'Password is not match !'})
if(emailCheck(req.body.email)==false)
res.json({isLogin: false, state: 'error',
message:'Email is not valid !'})
req.body['_id'] = req.body.userid
req.body['pw'] = req.body.password
delete req.body['userid']
delete req.body['type']
delete req.body['password2']
delete req.body['password2']
try{
var result = await user_model.create(req.body)
req.session.username = req.body.userid;
res.json({isLogin: true, state: 'success',
message:''})
}catch(err){
res.json({isLogin: false, state: 'error',
message:err.message.split(":")[0]})
}
}
});
2. 이메일 형식체크 함수
이메일 형식체크는 정규식을 사용하여 이메일의 형식을 체크하도록 하는 샘플을 참조하여 구현하였다.
function emailCheck(email_address){
email_regex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i;
if(!email_regex.test(email_address)){
return false;
}else{
return true;
}
}
'Programming > 온라인 영어암기 단어장 개발' 카테고리의 다른 글
온라인 영어 암기 단어장 만들기(6) - Google Translate API를 활용한 단어 뜻 찾아오기 (0) | 2025.01.11 |
---|---|
온라인 영어 암기 단어장 만들기(5) - 단어입력화면 만들기 (1) | 2025.01.04 |
온라인 영어 암기 단어장 만들기(4) - 데이터베이스 설계하기 (0) | 2024.12.03 |
온라인 영어 암기 단어장 만들기(2) - 로그인 화면구성 (2) | 2024.11.20 |
온라인 영어 암기 단어장 만들기(1) - 서버환경구성 (0) | 2024.11.16 |