• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Node.js, Express 게시판 왜 req.user 가 undefined 일까요

왜 req.user 가 undefined 일까요

  • 이 주제에는 2개 답변, 2명 참여가 있으며 Leo8 월 전에 전에 마지막으로 업데이트했습니다.
3 글 보임 - 1 에서 3 까지 (총 3 중에서)
  • 글쓴이
  • #132288

    Leo
    참가자
    안녕하세요, 왜 /api/auth/info 에 들어가도  undefined 만 터미널에 출력 되고 빈 회색 창만 뜰까요,
    원래 req.user 에는 로그인 정보가 떠야되는걸로 알고 있습니다.
     Screenshot 2024-11-13 at 3.35.22 PMScreenshot 2024-11-13 at 3.41.39 PM
    
    const express = require("express");
    const { ObjectId } = require("mongodb");
    const app = express();
    app.use(express.static(__dirname + "/styles"));
    app.use(express.static(__dirname + "/views"));
    app.set("view engine", "ejs");
    app.use(express.json());
    app.use(express.urlencoded({ extended: true }));
    const session = require("express-session");
    const passport = require("passport");
    const LocalStrategy = require("passport-local");
    require("dotenv").config();
    const bcrypt = require("bcrypt");
    const MongoStore = require("connect-mongo");
    const uri = process.env.dburl;
    const { MongoClient, ServerApiVersion } = require("mongodb");
    const client = new MongoClient(uri);
    let db;
    async function run() {
    try {
    await client.connect();
    await client.db("admin").command({ ping: 1 });
     console.log(
    "Pinged your deployment. You successfully connected to MongoDB!"
     );
     db = await client.db("forum");
    } catch (e) {
     console.error(e);
    }
    }
    run().catch(console.dir);
    app.use(passport.initialize());
    app.use(
    session({
    secret: process.env.sessionsecret,
    resave: false,
    saveUninitialized: false,
    store: MongoStore.create({
    mongoUrl: uri,
    dbName: "forum",
    }),
    })
    );
    passport.use(
    new LocalStrategy(async (userid, userpasswd, cb) => {
    try {
    let result = await db.collection("user").findOne({ username: userid });
    if (!result) {
    return cb(null, false, { message: "no_id_in_db" });
    }
    if (await bcrypt.compare(userpasswd, result.password)) {
    return cb(null, result);
    } else {
    return cb(null, false, { message: "password_not_correct" });
    }
    } catch (error) {
    return cb(null, false, { message: "서버에러" });
    }
    })
    );
    passport.serializeUser((user, done) => {
     process.nextTick(() => {
    done(null, { id: user._id, username: user.username });
    });
    });
    passport.deserializeUser(async (user, done) => {
    let result = await db
    .collection("user")
    .findOne({ _id: new ObjectId(user.id) });
    delete result.password;
     process.nextTick(() => {
    return done(null, result);
    });
    });
    const printf = console.log;
    const PORT = 80;
    app.listen(PORT, () => {
    printf(`http://localhost:${PORT} 에서 서버 실행중`);
    });
    app.get("/", (req, res) => {
     res.render("index.ejs");
    });
    app.get("/auth", async (req, res) => {
     res.render("auth.ejs", { query: req.query });
    });
    app.get("/auth/new", async (req, res) => {
     res.render("authNew.ejs", { query: req.query });
    });
    app.post("/api/auth/new/", async (req, res) => {
    const passwd = req.body.password;
    const username = req.body.username;
    let isokay_id = /^[a-zA-Z0-9]+$/.test(username) && username.length >= 3;
    try {
    const existingUser = await db
    .collection("user")
    .findOne({ username: username });
    if (existingUser || !isokay_id) {
    return res.redirect("/auth/new?checkusername=true");
    }
    const isokay_passwd =
    passwd.length >= 10 &&
    /[0-9]/.test(passwd) &&
    /[!@#$%^&*(),.?":{}|<>]/.test(passwd);
    if (!isokay_passwd) {
    return res.redirect("/auth/new?checkpassword=true");
    }
    let hashedpasswd = await bcrypt.hash(passwd, 10);
    await db.collection("user").insertOne({
    username: username,
    password: hashedpasswd,
    });
     res.redirect("/");
    } catch (error) {
     console.error(error);
     res.status(500).send("Internal Server Error");
    }
    });
    app.post("/api/auth", async (req, res, next) => {
     passport.authenticate("local", (error, user, info) => {
    if (error) {
    return res.status(500).json(error);
    }
    if (!user) {
    if (info.message == "password_not_correct") {
    return res.redirect("/auth?incorrectPassword=true");
    }
    if (info.message == "no_id_in_db") {
    return res.redirect("/auth?incorrectUserName=true");
    }
    }
     req.logIn(user, (err) => {
    if (err) {
    return next(err);
    }
     res.redirect("/");
    });
    })(req, res, next);
    });
    app.get("/api/auth/info", (req, res) => {
    printf(req.user);
     res.send(req.user);
    });
    app.get("*", (req, res) => {
     res.status(404).render("notFound.ejs");
    });
    
    
    로그인 하고 바로 /api/auth/info 에 들어갓읍니다.
    
    
    
    
    • 이 게시글은 Leo에 의해 8 월 전에 수정됐습니다. 이유: 그냥
    #132302

    codingapple
    키 마스터
    app.use(passport.session())도 추가해봅시다
    #132303

    Leo
    참가자
    감사합니다. 해결했어요
3 글 보임 - 1 에서 3 까지 (총 3 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠