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

home2 게시판 Node.js, Express 게시판 router에서 passport사용하는법 (mongoDB)

router에서 passport사용하는법 (mongoDB)

4 글 보임 - 1 에서 4 까지 (총 4 중에서)
  • 글쓴이
  • #56455

    junsai
    참가자
    router에서 passport사용하는법
    
    router 에서 login.js를 만들어서 로그인 기능만을 관리 하고 싶어서 이것저것 알아봤습니다.
    router에서 mongoDB를 사용하기 위해서 req.app.db 를 사용하면 된다는것은 알았는데, passport에서는 req가 없어서 어떻게 db를 사용해야 할지 모르겠습니다.
    
    
    //server.js
    MongoClient.connect(mongoDbUrl, function (err, client) {
        if (err) return console.log(err)
        db = client.db('nodejs-work-request')
        app.db = db
        console.log('connected')
    })
    
    // login.js
    var router = require('express').Router();
    
    function is_login(req, res, next) {
        if (req.user) {
            next()
        } else {
            res.render('login.ejs')
        }
    }
    passport.use(new LocalStrategy({
        usernameField: 'id',
        passwordField: 'pw',
        session: true,
        passReqToCallback: false,
    }, function (input_id, input_pw, done) {
    
        //여기에 req.app.db.coll... 를 사용할수 없음
        db.collection('accounts').findOne({ 'id': input_id }, (err, result) => {
            console.log(result)
            login_data = result
            if (err) return done(err)
            if (!login_data) return done(null, false, { message: 'account does not exist' })
            if (input_pw == login_data.pw) {
                return done(null, login_data)
            } else {
                return done(null, false, { message: 'wrong password' })
            }
        })
    }));
    passport.serializeUser(function (user, done) {
        done(null, user.id)
    });
    passport.deserializeUser(function (user_id_saved, done) {
    
        //여기에 req.app.db.coll... 를 사용할수 없음
        db.collection('accounts').findOne({ 'id': user_id_saved }, (err, result) => {
            done(null, result)
        })
    });
    module.exports = router;
    
    
    mysql 로 할때는 server.js 에서 export db로 routes에서 db를 쉽게 이용했는데, mongodb는 db를 routes에서 사용하기가 좀 어렵네요
    #56484

    codingapple
    키 마스터
    https://bluexmas.tistory.com/922
    이런식으로 함수 파라미터로 db같은것도 전달해주면 그 파일에서도 db변수 사용가능할듯요
    #56561

    junsai
    참가자
    감사합니다 선생님. 대충 이런식으로 해결했습니다. 다른사람들을 위해 정보 공유하겠습니다.
    
    //server.js
    
    module.exports.connect = function connect(callback){
        MongoClient.connect(mongoDbUrl, function (err, client) {
            if (err) return console.log(err)
            db = client.db('nodejs-work-request')
            app.db = db
            module.exports.db = db
            console.log('connected')
            callback(err)
        })
    }
    const mongo = require('./server.js')
    mongo.connect(function(err){
        if (err) throw err;
    })
    
    
    //login.js
    
    var router = require('express').Router();
    var mongo = require('./../server.js')
    router.get('/test', (req, res) => {
        mongo.connect(function (err) {
            if (err) throw err;
            mongo.db.collection('users').find().toArray((err, result) => {
                console.log(result)
                res.render('users.ejs', { users: result })
            })
        })
    })
    #102081

    김민혁
    참가자
    덕분에 도움 많이 되었습니다!
4 글 보임 - 1 에서 4 까지 (총 4 중에서)
  • 답변은 로그인 후 가능합니다.

About

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

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

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