카테고리 없음
passportjs, auth 인증 (로그인 하지 않을 경우 마이페이 접근 못하게)
Canyi
2022. 11. 23. 12:17
1. local 인증
2. 타사 인증(Federation Authentication)
MongoDBWebserver.js
npm install passport passport-local
//passport
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
//passport 미들웨어
app.use(passport.initialize());
app.use(passport.session());
//로그인 passport 인증
app.post('/login', passport.authenticate('local',{
failureRedirect : '/fail'
}), function (req , res) {
res.redirect('/');
})
passport.use(new LocalStrategy({
usernameField : 'id',
passwordField : 'pw',
session : true,
passReqToCallback : false,
}, function(inputid, inputpw, done){
console.log(inputid);
console.log(inputpw);
db.collection('login').findOne({id :inputid}, function (err,result,res){
if(err) return done(err); //done :
if(!result){
return done(null, false, {message : '존재하지 않는 아이디입니다.'}); //null: server error code
}
if(result.pw == inputpw){
return done(null, result); //result는 passport.serializeUser의 user로 넘어간다.
}
else{
return done(null, false, {message : '비번이 틀렸습니다.'});
}
})
}))
//쿠키에 세션 등록
passport.serializeUser(function(user, done){
done(null,user.id);
})
//세션데이터를 가진 사람을 db에서 찾기
passport.deserializeUser(function (userid, done){
db.collection('login').findOne({id: userid}, function(err, result){
done(null,result);
console.log(result);
})
});
로그인을 하지 않을 경우 예외처리
app.get('/fail', function (req , res) {
res.send('로그인해주세요');
})
login 할경우 mypage보이기 설정
//마이페이지
app.get('/mypage', isLogin,function (req , res) {
res.render('mypage.ejs',{사용자: req.user});
})
//login 할경우 mypage보이기 설정
function isLogin(req, res, next ) {
if(req.user){
next();
}
else{
res.send('로그인 해주세요');
}
}
mypage.ejs
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>홈입니다.</title>
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi"
crossorigin="anonymous">
</head>
<body>
<%- include('nav.html') %>
<h1 class="ml-2 my-3 text-center">마이페이지입니다!</h1>
<h1 class="ml-2 my-3 text-center"><%= 사용자.id %>님 반갑습니다.</h1>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3"
crossorigin="anonymous"></script>
</body>
</html>