Showing
6 changed files
with
65 additions
and
6 deletions
| ... | @@ -78,6 +78,20 @@ export const postGithubLogin = (req, res) => { | ... | @@ -78,6 +78,20 @@ export const postGithubLogin = (req, res) => { |
| 78 | res.redirect(routes.home); | 78 | res.redirect(routes.home); |
| 79 | }; | 79 | }; |
| 80 | 80 | ||
| 81 | +export const facebookLogin = passport.authenticate("facebook"); | ||
| 82 | + | ||
| 83 | +export const facebookLoginCallback = ( | ||
| 84 | + accessToken, | ||
| 85 | + refreshToken, | ||
| 86 | + profile, | ||
| 87 | + cb | ||
| 88 | +) => { | ||
| 89 | + console.log(accessToken, refreshToken, profile, cb); | ||
| 90 | +}; | ||
| 91 | + | ||
| 92 | +export const postFacebookLogin = (req, res) => { | ||
| 93 | + res.redirect(routes.home); | ||
| 94 | +}; | ||
| 81 | // 로그아웃을 클릭하면 LogOut페이지로 가는 것 대신에, 로그아웃을 처리한 후 | 95 | // 로그아웃을 클릭하면 LogOut페이지로 가는 것 대신에, 로그아웃을 처리한 후 |
| 82 | // home 페이지로 Redirect로 표현할 것이다. | 96 | // home 페이지로 Redirect로 표현할 것이다. |
| 83 | // 즉, 초반에 만들어둔 logout.pug는 삭제해도 좋다. | 97 | // 즉, 초반에 만들어둔 logout.pug는 삭제해도 좋다. |
| ... | @@ -91,8 +105,18 @@ export const getMe = (req, res) => | ... | @@ -91,8 +105,18 @@ export const getMe = (req, res) => |
| 91 | res.render("userDetail", { pageTitle: "User Detail", user: req.user }); | 105 | res.render("userDetail", { pageTitle: "User Detail", user: req.user }); |
| 92 | 106 | ||
| 93 | // export const users = (req, res) => res.render("users", { pageTitle: "Users" }); | 107 | // export const users = (req, res) => res.render("users", { pageTitle: "Users" }); |
| 94 | -export const userDetail = (req, res) => | 108 | + |
| 95 | - res.render("userDetail", { pageTitle: "User Detail" }); | 109 | +export const userDetail = async (req, res) => { |
| 110 | + const { | ||
| 111 | + params: { id }, | ||
| 112 | + } = req; // req로 부터 params의 id가져오기 | ||
| 113 | + try { | ||
| 114 | + const user = await User.findById(id); | ||
| 115 | + res.render("userDetail", { pageTitle: "User Detail", user }); | ||
| 116 | + } catch (error) { | ||
| 117 | + res.redirect(routes.home); | ||
| 118 | + } | ||
| 119 | +}; | ||
| 96 | export const editProfile = (req, res) => | 120 | export const editProfile = (req, res) => |
| 97 | res.render("editProfile", { pageTitle: "Edit Profile" }); | 121 | res.render("editProfile", { pageTitle: "Edit Profile" }); |
| 98 | export const changePassword = (req, res) => | 122 | export const changePassword = (req, res) => | ... | ... |
| ... | @@ -35,6 +35,7 @@ | ... | @@ -35,6 +35,7 @@ |
| 35 | "multer": "^1.4.2", | 35 | "multer": "^1.4.2", |
| 36 | "node-sass": "^4.14.1", | 36 | "node-sass": "^4.14.1", |
| 37 | "passport": "^0.4.1", | 37 | "passport": "^0.4.1", |
| 38 | + "passport-facebook": "^3.0.0", | ||
| 38 | "passport-github": "^1.1.0", | 39 | "passport-github": "^1.1.0", |
| 39 | "passport-local": "^1.0.0", | 40 | "passport-local": "^1.0.0", |
| 40 | "passport-local-mongoose": "^6.0.1", | 41 | "passport-local-mongoose": "^6.0.1", | ... | ... |
| 1 | import dotenv from "dotenv"; | 1 | import dotenv from "dotenv"; |
| 2 | import passport from "passport"; | 2 | import passport from "passport"; |
| 3 | import GithubStrategy from "passport-github"; | 3 | import GithubStrategy from "passport-github"; |
| 4 | +import FacebookStrategy from "passport-facebook"; | ||
| 4 | import User from "./models/User"; | 5 | import User from "./models/User"; |
| 5 | -import { githubLoginCallback } from "./controllers/userController"; | 6 | +import { |
| 7 | + githubLoginCallback, | ||
| 8 | + facebookLoginCallback, | ||
| 9 | +} from "./controllers/userController"; | ||
| 6 | import routes from "./routes"; | 10 | import routes from "./routes"; |
| 7 | 11 | ||
| 8 | dotenv.config(); | 12 | dotenv.config(); |
| ... | @@ -21,5 +25,16 @@ passport.use( | ... | @@ -21,5 +25,16 @@ passport.use( |
| 21 | ) | 25 | ) |
| 22 | ); | 26 | ); |
| 23 | 27 | ||
| 28 | +passport.use( | ||
| 29 | + new FacebookStrategy( | ||
| 30 | + { | ||
| 31 | + clientID: process.env.FB_ID, | ||
| 32 | + clientSecret: process.env.FB_SECRET, | ||
| 33 | + callbackURL: `http://localhost:80${routes.facebookCallback}`, | ||
| 34 | + }, | ||
| 35 | + facebookLoginCallback | ||
| 36 | + ) | ||
| 37 | +); | ||
| 38 | + | ||
| 24 | passport.serializeUser(User.serializeUser()); | 39 | passport.serializeUser(User.serializeUser()); |
| 25 | passport.deserializeUser(User.deserializeUser()); | 40 | passport.deserializeUser(User.deserializeUser()); | ... | ... |
| ... | @@ -11,6 +11,8 @@ import { | ... | @@ -11,6 +11,8 @@ import { |
| 11 | githubLogin, | 11 | githubLogin, |
| 12 | postGithubLogin, | 12 | postGithubLogin, |
| 13 | getMe, | 13 | getMe, |
| 14 | + facebookLogin, | ||
| 15 | + postFacebookLogin, | ||
| 14 | } from "../controllers/userController"; | 16 | } from "../controllers/userController"; |
| 15 | import { onlyPublic, onlyPrivate } from "../middlewares"; | 17 | import { onlyPublic, onlyPrivate } from "../middlewares"; |
| 16 | 18 | ||
| ... | @@ -35,4 +37,14 @@ globalRouter.get( | ... | @@ -35,4 +37,14 @@ globalRouter.get( |
| 35 | postGithubLogin | 37 | postGithubLogin |
| 36 | ); | 38 | ); |
| 37 | globalRouter.get(routes.me, getMe); | 39 | globalRouter.get(routes.me, getMe); |
| 40 | + | ||
| 41 | +globalRouter.get(routes.facebook, facebookLogin); | ||
| 42 | +globalRouter.get( | ||
| 43 | + routes.facebookCallback, | ||
| 44 | + passport.authenticate("facebook", { | ||
| 45 | + failureRedirect: "/login", | ||
| 46 | + }), | ||
| 47 | + postFacebookLogin | ||
| 48 | +); | ||
| 49 | + | ||
| 38 | export default globalRouter; | 50 | export default globalRouter; | ... | ... |
| ... | @@ -23,6 +23,10 @@ const DELETE_VIDEO = "/:id/delete"; | ... | @@ -23,6 +23,10 @@ const DELETE_VIDEO = "/:id/delete"; |
| 23 | const GITHUB = "/auth/github"; | 23 | const GITHUB = "/auth/github"; |
| 24 | const GITHUB_CALLBACK = "/auth/github/callback"; | 24 | const GITHUB_CALLBACK = "/auth/github/callback"; |
| 25 | 25 | ||
| 26 | |||
| 27 | +const FB = "/auth/facebook"; | ||
| 28 | +const FB_CALLBACK = "/auth/facebook/callback"; | ||
| 29 | + | ||
| 26 | const routes = { | 30 | const routes = { |
| 27 | home: HOME, | 31 | home: HOME, |
| 28 | join: JOIN, | 32 | join: JOIN, |
| ... | @@ -65,6 +69,8 @@ const routes = { | ... | @@ -65,6 +69,8 @@ const routes = { |
| 65 | gitHub: GITHUB, | 69 | gitHub: GITHUB, |
| 66 | githubCallback: GITHUB_CALLBACK, | 70 | githubCallback: GITHUB_CALLBACK, |
| 67 | me: ME, | 71 | me: ME, |
| 72 | + facebook: FB, | ||
| 73 | + facebookCallback: FB_CALLBACK, | ||
| 68 | }; | 74 | }; |
| 69 | // template에서 직접 접근이 필요한 경우 함수로 바꿔준다. | 75 | // template에서 직접 접근이 필요한 경우 함수로 바꿔준다. |
| 70 | export default routes; | 76 | export default routes; | ... | ... |
| ... | @@ -5,6 +5,7 @@ | ... | @@ -5,6 +5,7 @@ |
| 5 | i.fab.fa-github | 5 | i.fab.fa-github |
| 6 | | Continue with Github | 6 | | Continue with Github |
| 7 | button.social-login--facebook | 7 | button.social-login--facebook |
| 8 | - span | ||
| 9 | - i.fab.fa-facebook | ||
| 10 | - | Continue with Facebook | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
| 8 | + a(href=routes.facebook) | ||
| 9 | + span | ||
| 10 | + i.fab.fa-facebook | ||
| 11 | + | Continue with Facebook | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
-
Please register or login to post a comment