묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
클라이언트 서버에서 소셜 로그인
현재 상황클라이언트와 서버를 각자 다른 도메인에 배포했습니다.소셜 로그인은 passport 모듈과 session을 사용했습니다.서버에서 소셜 로그인이 성공해도 클라이언트에는 세션 쿠키가 전달되지 않습니다.클라이언트axios get 요청을 보내면 cors 에러가 떠서 a 태그를 사용했습니다.<a href="http://서버ip/auth/github">깃 헙 로그인<a/>서버아래의 코드는 강의의 내용과 동일합니다. passport 모듈을 활용해 소셜 로그인을 구현했습니다.import express from "express"; import passport from "passport"; import { isLoggedIn, isNotLoggedIn } from "../middlewares/authMiddleware.js"; const router = express.Router(); router.get("/github", passport.authenticate("github")); router.get( "/github/callback", passport.authenticate("github", { failureRedirect: "/", }), (req, res) => { res.redirect(`http://localhost:3000`); } ); router.get("/logout", isLoggedIn, (req, res) => { req.logout(); req.session.destroy(); res.json({ message: "logout" }); }); export default router;소셜 로그인에 성공하면 클라이언트 서버의 메인 페이지로 redirect 시키고 있습니다.문의서버에서 소셜 로그인 성공시 클라이언트 서버에도 session 쿠키를 전달하고 싶습니다.두 개의 다른 서버에서 소셜 로그인을 어떻게 구현해야될지 모르겠습니다.
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
passport로 로그인 에러 시 payload 전달 방법
강사님, 안녕하세요. 혼자서 해보려다가 도저히 모르겠어서 질문 드립니다. 로그인 에러 시 각각 상황에 맞는 logInError를 안내하고 싶어서 제작 중인데, 회원가입할때도 다른 작업할때도 에러나면 payload 값이 잘 나오던데, 로그인 할때만 에러나면 Payload 값이 undefined 로 나오네요. 회원가입한적 없는 아이디일때 "존재하지 않는 이메일입니다" 아이디는 있으나 비밀번호가 틀렸을때 "비밀번호가 틀렸습니다" /back/routes/user.js 에서 //SignUp router.post('/', isNotLoggedIn, async (req, res, next) => { try { *** if (exUser) { return res.status(403).json('이미 가입된 아이디입니다.'); } *** } catch (error) { console.error(error); next(error); } }); 이렇게 json 형태로 에러 메시지를 적어주면 front로 전달된다고 배웠고, 회원가입이나 다른 호출은 다 잘 출력됩니다. 그런데 login 쪽만 payload(logInError)가 undefined로 나옵니다. (개발자도구 네트워크에서는 메시지가 잘 찍힙니다.) router.post('/login', isNotLoggedIn, (req, res, next) => { passport.authenticate('local', (err, user, info) => { *** if (info) { return res.status(401).json(info.reason); } *** })(req, res, next); }); /back/passport/local.js *** module.exports = () => { passport.use( new LocalStrategy( *** async (userid, password, done) => { try { *** if (!user) { return done(null, false, { reason: '존재하지 않는 이메일입니다!' }); } *** return done(null, false, { reason: '비밀번호가 틀렸습니다.' }); } catch (error) { *** } } ) ); }; //회원가입 페이지 /front/reducers/user.js //회원가입 페이지 //로그인 페이지 회원가입과 다르게 로그인은 passport가 쓰여서인듯 한데, 에러 났을때 payload 값을 가져오게 할 방법이 있을까요?
-
해결됨Node.js에 TypeScript 적용하기(feat. NodeBird)
passport/index.ts 에러 입니다
안녕하세요! passport/index.ts에서 에러가 발생합니다. 공지사항에 남겨주신 부분 참고해서 types/index.d.ts에 추가도 하였는데 에디터에는 에러가 발생하지 않고 nodemon으로 실행을 하니 에러가 발생합니다. 다른 질문들 찾아보니 npx tsx --noEmit 이 있어서 해봤더니 이 명령어에서는 에러가 발생하지 않습니다. 아래는 에러 및 코드 입니다!
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
req.login 함수 동작에 관한 질문
안녕하세요 강의 듣는 도중 궁금한 점이 생겨 질문 남깁니다. 제가 기초 개념이 부족한 탓인지 req.login이 동작 되는 원리를 모르겠습니다. 제가 알기로는 브라우저에서 api 요청시 요청 정보가 req객체에 담겨서 벡엔드로 가는 걸로 알고 있는데 req 객체는 express에서 제공되는 객체이고 req.login에서 login 메서드는 passport에서 제공되는 것 같은데 혹시 제가 잘못 알고 있는 것이고 1.req객체가 login이라는 메서드를 지원하는 건가요? 그게 아니라면 post('/login', (req, res, next) => { passport 미들웨어 })(req, res, next); 이런 코드에서 2. req객체가 passport 모듈을 상속 받는 건가요..? js를 잘 몰라서 이해가 안가나 싶어서 프로토타입, 클로저 이런 키워드로 좀 찾아 봤는데 그래도 이해가 잘 안되서 질문 남깁니다.
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
실제 배포한 ip에서는 쿠키가 생성이되지않고 passport중에deserializeUser호출이 안됩니다.
안녕하세요 조현영 선생님 제가지금 해당 강의를 통해서 개인 프로젝트를 진행중인데 문제가 발생이 됬습니다. 클라이언트와 백엔드 다 우분트 환경에서 잘 작동해서 실제 배포한 ip주소로 들어가면 정상적으로 화면이 보여집니다. 클라이언트 서버: 다 작동이 잘 되고 회원가입 기능도 잘 작동해서 실제 해당http://13.125.96.64 쪽으로 요청을 하여 데이터베이스도 잘 생성이되고 됩니다. 근데 문제가 local로 성공적으로 로그인을하면 passport.js 쪽에서 serializeUser 한번 실행을하고 쿠키가 생겨야하는데 생기질 않습니다. 그리고 다시 메인 화면으로 돌아오면 LOAD_MY_INFO_REQUEST action으로 통해서 cookie 와 같이 서버로 전송을해서 deserializeUser도 실행이 되야하는데. deserializeUser도 실행이 안됩니다. 제 로컬에서는 모든게 다 잘 작동합니다. 로컬에서 프론트: 로그인 하면 잘 작동합니다. 로컬에서 백엔드 pm2 환경 보시면 쿠키도 잘 생성되고 passport.js 에서 deserializeUser 도 잘 작동되는게 보입니다. 하지만 배포한 ip에서는 쿠키도 생성이 되질않고 deserializeUser 도 작동하지 않습니다위 사진은 제가 로그인이 성공하고 다시 메인 페이지로 돌아온 화면입니다 성공적으로 로그인이 되도 쿠키는 여전히 생성되지 않았습니다. 위 사진은 제가 로그인이 성공하고 다시 메인 페이지로 돌아온 화면입니다 성공적으로 로그인이 되도 쿠키는 여전히 생성되지 않았습니다. 백엔드쪽 봐도serializeUser 으로 로그인이 성공하고 deserializeUser는 호출이 되질 않습니다. back/app.js 소스코드입니다. const express = require('express'); const PORT = 80; const app = express(); const cors = require('cors'); const effectRouter = require('./routers/effect'); const userRouter = require('./routers/user'); const effectsRouter = require('./routers/effects'); const db = require('./models'); const session = require('express-session'); const cookieParser = require('cookie-parser'); const dotenv = require('dotenv'); const passport = require('passport'); const passportConfig = require('./passport'); const morgan = require('morgan'); const hpp = require('hpp'); const helmet = require('helmet'); db.sequelize .sync() .then(() => { console.log('db 연결 성공'); }) .catch(console.error); passportConfig(); dotenv.config(); app.use(cookieParser(process.env.EFFECTSHOP_SECRET)); app.use( session({ saveUninitialized: false, resave: false, secret:process.env.EFFECTSHOP_SECRET, }) ) if(process.env.NODE_ENV === 'production'){ app.use(morgan('combined')); app.use(hpp()); //보안에 도움되는 라이브러리 app.use(helmet()); }else{ app.use(morgan('dev')); } app.use(passport.initialize()); // 패스포트 설정 미들웨어에 추가. app.use(passport.session()); app.use(express.json()); app.use(express.urlencoded({extended: true})); app.use(cors({ origin:["http://localhost:3000","http://54.180.81.148"], credentials:true, })); app.get('/',(req,res)=>{ res.send('hello express'); }) app.use('/effects' ,effectsRouter); app.use('/effect',effectRouter); app.use('/user', userRouter); app.listen(PORT, ()=>{ console.log(`server on! at http://localhost:${PORT}`); }); 더 자세한 코드를 보시길 원하신다면 여기에 제 소스코드를 올려 놓았습니다 ㅠㅠ 엄청난 고민끝에 여쭤봅니다 ㅜ 감사합니다. https://github.com/sungmin-choi/effectShopByHTML-CSS
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
google passport를 이용한 로그인 기능에 대해 질문이 있습니다
안녕하세요 제로초님! 제가 현제 google passport를 이용해서 로그인 하는 기능을 추가하고 있는데, 궁금한 점이, local로 로그인 할때는 res.status(200).json(fullUserWithoutPassword);이렇게 유저 데이터를 프론트로 같이 보내주시는데, google passport 공식문서에는 redirect밖에 없어서 어떻게 유저 데이터를 프론트로 보내는 지 궁금합니다.
-
미해결[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지
패스포트 없이 로그인 기능
안녕하세요 제로초님. 패스포트 사용이 너무 번거로워, 기본적인 쿠키와 세션만을 이용해서 로그인 기능을 구현해보려 하는데, 이럴 경우 프론트에서 게시글이나 댓글 요청을 보낼 때 매번 쿠키를 담아서 보낸뒤 인가(?)를 받는 식으로 하면 되나요? 그리고 실제로 실무에서도 로그인 기능 만들 때에도 패스포트를 많이 사용하는지 궁금합니다.
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
GET 요청시 req.user = undefined 문제
POST 요청 시에는 req.user로 유저 데이터가 잘 받아지는데 GET 요청시에 계속 req.user 정보가 undefined로 뜨네요.. front/sagas/index.js back/app.js 위와같이 credentials도 true로 바꿔 줬는데도 GET에서 user 정보를 받을 수가 없습니다. 다른 설정 문제일까요?
-
미해결Vue로 Nodebird SNS 만들기
ch5까지 들었는데, 작동이 안되는 부분이 있습니다.
안녕하세요. ch5까지 다 듣고나서 에러 혹은 문제있는 부분들을 수정하고 있습니다. 1. 회원가입 후, 자동으로 vuex에 setMe가 된걸 확인했는데, 글 등록을 시도하면 '로그인이 필요합니다.'라는 401 에러가 뜹니다. 페이지 새로고침하면 로그아웃으로 되어있어서, 다시 로그인하면 잘 작동합니다. 코드는 깃허브에 있는거와 비교해보고 혼자서 다시 둘러봤지만, 어디가 잘못된지 모르겠습니다. 코드상으로는 /user/login 부분과 /user 부분과 뒷부분이 동일한데, 왜 이런 오류?가 나는지, 어디서 확인해봐야할지 모르겠습니다. 2. 스크롤을 내려도 posts/loadPosts가 실행되지 않습니다. 이 또한 혼자 생각해보고, 깃허브 코드와 비교해봤지만, 어디서 잘못된지 모르겠습니다. 이건 에러메세지조차 뜨지않아서 어디를 확인해야할지 감이 잡히질 않습니다.