2013-03-21 4 views
1

Google 애플리케이션 이메일 ID로 passport js를 사용하려고합니다. gmail.com 이메일 ID를 사용하여 인증 할 수 있습니다. 이메일 ID가 Google 앱 ID (google.com/a/companyname.com)인지 어떻게 인증 할 수 있습니까? google apps를 사용하는 passportjs 인증 이메일 ID

내 코드

var express = require('express'); 
var app = express(); 
var passport = require('passport'); 
var GoogleStrategy = require('passport-google').Strategy; 

passport.use(new GoogleStrategy({ 
    returnURL: 'http://10.3.0.52:3000/auth/google/return', 
    realm: 'http://10.3.0.52:3000/' 
}, 
function(identifier, profile, done) { 
    User.findOrCreate({ 
     openId: identifier 
    }, function(err, user) { 
     done(err, user); 
    }); 
} 
)); 

app.get('/auth/google', passport.authenticate('google')); 

app.get('/auth/google/return', 
    passport.authenticate('google', { 
     successRedirect: '/', 
     failureRedirect: '/login' 
    })); 

app.get('/', function(req, res){ 
    res.writeHead(200); 

    res.end("connected"); 

}); 

app.listen(process.env.PORT || 3000); 
+1

passport-google-oauth) ('OAuth2Strategy'를 사용하여) 내 Google App 주소를 사용하여 로그인 할 수 있습니다. – robertklep

+0

나는 더 나은 이해를 위해 내 코드를 추가하고 코드를 편집했다. 나는 passport-google-oauth를 사용해야한다. 'GOOGLE_CLIENT_ID'및 'GOOGLE_CLIENT_SECRET'이 무엇인지 알 수 있습니까? –

답변

2

에 코드가 누락 된 몇 가지 중요한 부분입니다 : 장소에 그와

... 
passport.use(...); // this you have 

// these are required as well. 
app.use(passport.initialize()); 
app.use(passport.session()); 

// please read docs for the following two calls 
passport.serializeUser(function(user, done) { 
    done(null, user); 
}); 

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

, 내 Google 앱 주소를 잘 사용하여 로그인 할 수 있습니다.

EDIT : 노드 0.8에서는 작동하지만 노드 0.10에서는 오류가 발생합니다. 어쨌든 passport-google-oauth을 사용하는 것이 더 나은 해결책이라고 생각합니다. 이를 위해서는 신청서를 Google (here)에 등록해야합니다. 등록 후에는 사용할 수있는 GOOGLE_CLIENT_ID 및 GOOGLE_CLIENT_SECRET 코드가 모두 제공됩니다.

+0

특정 도메인에서만 사용자 로그인을 제한 할 수 있습니까? 이제 2 개의 다른 Google 앱 ID ([email protected], [email protected])에서 로그인 할 수 있습니다. abc.com의 사용자는 앱에만 로그인하길 원합니다. 코드에는 abc.com 계정의 클라이언트 ID와 클라이언트 비밀이 포함됩니다. –

+1

[이 게시물] (http://stackoverflow.com/a/11001585/893780)은 특정 URL 매개 변수를 사용하여이를 수행하는 방법을 설명합니다. 그러나 Passport에 이러한 매개 변수를 전달할 수 있는지 확실하지 않습니다. – robertklep

+0

@robertklep 왜 '여권 -google-oauth'가 더 좋다고 생각하니, 뭔가 더 낫다고 제안 할 때 합리적인 근거를 제공해주세요! 내가 볼 수있는 한, 처음에는 앱을 만들 필요가없고 아무런 혜택도 없다. –

1

나는 전자 메일 도메인 내가 권한을 부여하고 싶은 경우 확인하는 방법을 만들었습니다

UserSchema.method('checkFordomain', function(value) { 
    var parts = value.split('@'); 
    return (parts[1] == 'companyname.com'); 
}); 

이 나는 ​​사용자 모델의 모델에 넣어 방법은 몽구스 스키마 모델을 사용하여,이다

여권 구글 전략의 콜백에서
if (!user.checkForMMdomain(profile.emails[0].value)) { 
    return done(); 
} 

당신의 passport.use 콜백 요에서 https://github.com/jaredhanson/passport-google-oauth

+0

이 답변은이 질문에 대한 정답이 아닙니다. 나는 다른 질문을했다. http://stackoverflow.com/questions/15615557/need-to-redirect-to-google-app-email-login-page-instead-of-normal-gmail-login-in. 나는 너무 늦게 대답했다. 따라서 코드에서 앱 도메인을 확인하지 않아도됩니다. –

+0

달콤한! 내가 뭘 찾고 있었는지. –

1

u는 기본 이메일 주소의 도메인에 따라 추가 검사를 수행 할 수 있습니다 (또는 당신이 확인되는대로) : 나는 [여권 - 구글 - OAuth를 (https://github.com/jaredhanson/을 사용하고

if (profile.emails[0].split('@')[1] !== authorizedDomain) { 
    return done(null, false); 
} 
관련 문제