Created
August 1, 2023 08:53
-
-
Save hanjae-jea/11e7fa02f37c58bcfc80974708016483 to your computer and use it in GitHub Desktop.
2023 08 01
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import bodyParser from "body-parser"; | |
import express from "express"; | |
import passport from "passport"; | |
import localPass from "passport-local"; | |
import jwtPass from "passport-jwt"; | |
import jwt from "jsonwebtoken"; | |
const app = express(); | |
app.use(bodyParser.json()); | |
// 다른 함수에서 토큰을 이용한 인증을 사용할 수 있도록 설정 | |
passport.use( | |
"jwt", | |
new jwtPass.Strategy( | |
{ | |
jwtFromRequest: jwtPass.ExtractJwt.fromAuthHeaderAsBearerToken(), | |
secretOrKey: "secret", | |
}, | |
(jwt_payload, done) => { | |
done(null, { | |
id: jwt_payload.id, | |
}); | |
} | |
) | |
); | |
// 처음 로그인 할 때 사용되는 함수 | |
passport.use( | |
"local", | |
new localPass.Strategy( | |
{ usernameField: "userId", passwordField: "password" }, | |
(username, password, done) => { | |
if (username === "admin" && password === "admin") { | |
return done(null, { username }); | |
} | |
return done(null, false, { reason: "Invalid username or password" }); | |
} | |
) | |
); | |
app.use(passport.initialize()); | |
// 로그인 안 해도 사용할 수 있는 함수 | |
app.get("/", (req, res) => { | |
res.send("Hello World!"); | |
}); | |
// 로그인 정보를 받아서 토큰 결과를 제공하는 함수 | |
app.post("/login", (req, res, next) => { | |
passport.authenticate("local", (err, user, info) => { | |
if (err || !user) { | |
return next(err); | |
} | |
if (info) { | |
return res.status(410).send(info.reason); | |
} | |
return req.login(user, { session: false }, (loginErr) => { | |
if (loginErr) { | |
return next(loginErr); | |
} | |
const token = jwt.sign({ id: user.username }, "secret"); | |
return res.json({ token: token }); | |
}); | |
})(req, res, next); | |
}); | |
// 토큰을 이용한 인증 | |
app.get( | |
"/login_check", | |
passport.authenticate("jwt", { session: false }), | |
(req, res) => { | |
res.json(`로그인한 아이디 정보 ${req.user.id}`); | |
} | |
); | |
// 서버 실행 | |
app.listen(3999, () => { | |
console.log("Server is listening on port 3999"); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment