2014-10-25 2 views
0

사용자에게 Gmail을 사용하여 로그인하도록 알려주는 node.js 웹 응용 프로그램을 만들려고합니다.node.js 모듈 passport-google을 사용하는 방법

그래서 여기서 지침을 사용하려고했습니다 : http://passportjs.org/guide/google/. url www.example.com을 localhost로 변경 한 다음 응용 프로그램을 실행했습니다. 그것은 사용자를 찾을 수 없다는 것을 알려줍니다. 다음은 전체 로그입니다 : User.findOrCreate ({openID : identifier}, function (err, user) {그리고 그 다음 행에} ReferenceError : 사용자가 정의되어 있지 않음

+0

madhums의 nodejs-express-demo가 많이 설명 할 수 있는지 확인하십시오. https://github.com/madhums/node-express-mongoose-demo –

답변

0

에 의해 "User"를 정의해야합니다. 모델에서 호출.. 예 때때로

var User = require('/path/to/User'); 

을 (당신이 아직없는 경우) 사용자 모델을 만들고 변수로 가져올 나는 디버깅 콘솔에 콜백을 기록하는 것이 도움이보고 찾아 원하는 출력이 침을 내고있는 경우

+0

사용자 모델이란 무엇이며 어떻게 만들 수 있습니까? – thelearnerofcode

+0

@ thelearnerofcode 사용자 모델은 사용자의 정보 스키마를 정의하는 곳입니다. 예를 들어 models/user.js의 https://github.com/StephenPunwasi/nodeauth를 살펴보십시오. –

+0

당신이 연결 한 사람은 몽구스가 필요합니다. 나는 데이터베이스 모듈을 사용하지 않는다. – thelearnerofcode

0

방금 ​​구현 한 것이 도움이 될 것입니다. 경로 섹션이 하단에 있습니다. Goog에서 호스트를 설정해야합니다. 르 키, 내 애플 리케이션은 AWS 서버의 전체 URL을 가지고

var passport = require('passport'); 
// ====== Passport and OAuth2 API 
var GoogleStretegy = require('passport-google-oauth').OAuth2Strategy; 

passport.serializeUser(function (user, done) { 
    done(null, user);}); 
passport.deserializeUser(function (obj, done){ 
    done(null, obj);}); 

// Set Passport Initialize and Sessions 
app.use(passport.initialize()); 
app.use(passport.session()); 

passport.use(new GoogleStretegy({ 
clientID: CREDENTIALS.google.GOOGLE_CLIENT_ID, 
clientSecret: CREDENTIALS.google.GOOGLE_CLIENT_SECRET, 
callbackURL:"<host>/oauth2callback"  
}, 
function (req, accessToken, refreshToken, profile, done) { 
    process.nextTick(function() { 
     console.log(JSON.stringify(profile)); 
     console.log(req); 
     var username= profile.emails[0].value.split('@'); 
     User.findOne({email: profile.emails[0].value,username:username[0]}).exec(function (err,user) { 
      if(!user){   
       var user = new User({username: username[0]}); 
       user.set('email',profile.emails[0].value); 
       user.set('FullName',profile.DisplayName); 
       user.save(function (err) { 
        if(err){ 
         console.log(err); 
         profile=null; 
         return done(null,profile); 
        }else { 
         return done(null, profile);   
        } 
       }); 
      }else { 
       return done(null, profile); 
      } 
     }); 
     // return done(null, profile); 
    }); 
} 
)); 

/// 경로!

router.get('/logout', function (req, res) { 

req.session.destroy(function() { 
// Google log out 
    req.logout(); 
    res.redirect('/login'); 
}); 
}); 
//Google OAuth2 
router.get('/auth/google',passport.authenticate('google', { scope: ['https://www.googleapis.com/auth/userinfo.profile','https://www.googleapis.com/auth/userinfo.email'] })); 
router.get('/oauth2callback', passport.authenticate('google', { failureRedirect: '/login' }), function (req, res) { 
    res.redirect('/'); 
}); 
+0

고맙습니다, 내 응용 프로그램에서 코드를 실행하려고했지만 Google이 나에게 400 오류를 제공하고 등록 된 URL이 없다고 말합니다. Google 개발자 콘솔에 가서 등록했지만 여전히 오류가 발생합니다. – thelearnerofcode

+0

한 번 URL을 확인하고 https : //를 입력하고 내 노드 앱은 http : //였습니다. –