servicos mostrados nesta serie de posts, se engana. Neste link, estao relacionados todos os modulos do passport capazes de realizar autenticacao externa. Lembre-se de olhar a documentacao de cada modulo para ter certeza do que fazer para adicionar a sua aplicacao.Lembrando que o projeto completo esta disponivel aqui, e este tutorial foi baseado neste excelente link.Como e de praxe, vamos agora gerar as nossas chaves. Acesse a pagina de desenvolvedores do Facebook, no menu superior, clique em My Apps, e se registre como desenvolvedor. Ao final do processo, esta pagina aparecera:Clique em website. Em seguida, digite o nome da nossa aplicacao e clique em "Create New Facebook App ID". No pop-up, escolha a categoria (pode ser a primeira) e clique no botao azul para finalizar o processo. Apos o carregamento da pagina do app, clique em "start over", no canto superior esquerdo para acessar o dashboard da nossa aplicacao. De cara, voce ja encontra o App ID e o App Secret. Copie os dois para o arquivo config.js.facebook:{ consumer_key:'seu app id aqui', consumer_secret:'seu app secret aqui', callback_url:'http://127.0.0.1:3000/facebook/callback',},Depois, volte para o facebook, pois temos mais uma configuracao para fazer. Por padrao, o Facebook nao aceita que nenhuma URL se conecte com ele via OAuth. Assim, precisamos informar a ele qual URL ele deve aceitar. Em Configuracoes > Aba advanced, na parte inferior da pagina tem um campo chamado "Valid OAuth redirect URIs". Neste campo, coloque a URL da nossa aplicacao (http://127.0.0.1:3000). Salve tudo e, agora sim, podemos voltar para a nossa aplicacao.Proxima fase: atualizar o modelo (arquivo models/User.js): facebook:{ id:String, token:String, email:String, name:String, },Depois, instalamos o modulo do passport que se conecta ao facebook e configuramos a estrategia no arquivo lib/passport.jsnpm install --save passport-facebook...var FacebookStrategy=require('passport-facebook').Strategy;... /************************* ***** FACEBOOK AUTH ***** *************************/ passport.use(new FacebookStrategy({ clientID: config.secret.facebook.consumer_key, clientSecret: config.secret.facebook.consumer_secret, callbackURL: config.secret.facebook.callback_url, passReqToCallback: true, }, function(req,token, refreshToken, profile, done){ process.nextTick(function(){ if(!req.user){ User.findOne({'auth.facebook.id':profile.id}, function(err, user){ if(err) return done(err); if(user){ return done(null, user); }else{ var newUser=new User(); newUser.auth.facebook.id=profile.id; newUser.auth.facebook.token=token; newUser.auth.facebook.email=profile.emails[0].value; newUser.auth.facebook.name=profile.name.givenName+' '+profile.name.familyName; newUser.save(function(err){ if(err) throw err; return done(null, newUser) }); } }); }else{ var _user=req.user; _user.auth.facebook.id=profile.id; _user.auth.facebook.token=token; _user.auth.facebook.email=profile.emails[0].value; _user.auth.facebook.name=profile.name.givenName+' '+profile.name.familyName; _user.save(function(err){ if(err) throw err; return done(null, _user); }); } }); }));Em seguida, as rotas (arquivo config/routes.js):'/facebook/connect':{ controller:'LoginController', action:'facebookConnect', }, '/facebook/callback':{ controller:'LoginController', action:'facebookCallback', }, '/facebook/link':{ controller:'LoginController', action:'facebookLink', policy:'isAuthenticated', }, '/facebook/link/callback':{ controller:'LoginController', action:'facebookLinkCallback', policy:'isAuthenticated', }, '/facebook/unlink':{ controller:'LoginController', action:'facebookUnlink', policy:'isAuthenticated', },Para finalizar, atualizamos as views. Primeiro o dashboard.hbs:<!--Facebook Information--> <div class="col-sm-6"> <div class="well"> <h3 class="text-primary"><span class="fa fa-facebook"></span> Facebook</h3> {{#if user.auth.facebook.id}} <p> <strong>id</strong>: {{user.auth.facebook.id}}<br/> <strong>token</strong>: {{user.auth.facebook.token}}<br/> <strong>email</strong>: {{user.auth.facebook.email}}<br/> <strong>name</strong>: {{user.auth.facebook.name}}<br/> </p> <a href="/facebook/unlink" class="btn btn-primary">Desassociar conta</a> {{else}} <a href="/facebook/link" class="btn btn-primary">Conectar ao Facebook</a> {{/if}} </div> </div>Depois, o index.hbs:<a href="/facebook/connect" class="btn btn-primary"><span class="fa fa-facebook"></span> Facebook</a>Quando executarmos a aplicacao, tudo deve estar funcionando devidamente.IndexDashboardCom isso, encerramos a nossa serie sobre autenticacao utilizando o Node.JS. Lembrando que todo o codigo desenvolvido neste tutorial esta disponivel aqui, e qualquer duvida referente ao desenvolvimento, podem postar nos comentarios que responderei o maximo possivel.Inte.Demais posts desta serie:Setup LocalPassport e Autenticacao LocalAutenticacao via Twitter e unindo contasAutenticacao via Google