노드 서버에서 로그인과 회원가입을 처리하는 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 |