as partes mais importantes ficaram preenchidas assim:Nome: node-auth-exampleCallback URL: http://127.0.0.1:3000/login/twitter/callbackDepois, quando clicarmos no botao de confirmar, a app e criada. Na aba Settings, marque a opcao "Allow this application to be used to Sign in with Twitter" e e salve as mudancas. Na aba "Keys and Access Tokens", copie o Consumer Key e o Consumer Secret para o arquivo config/config.js no seguinte formato: secret:{ cookie:'lquercoisaksadnckjadscdscdscndc', twitter:{ consumer_key:'', consumer_secret:'', }, }, Percebam que coloquei tambem o cookie secret nas configuracoes. E opcional, claro.Depois, vamos atualizar o nosso modelo de Usuario para armazenar as informacoes do twitter:auth:{ local:{ email:String, password:String, }, twitter:{ id:String, token:String, displayName:String, username:String, }, }, Em seguida, as rotas. Vamos precisar de 2 rotas:/twitter/connect: Acessar o twitter, obter as informacoes do usuario e fazer o login, /twitter/callback: URL que o Twitter vai usar para voltar a nossa aplicacao.No arquivo config/routes.js, temos: '/twitter/connect':{ controller:'LoginController', action:'twitterConnect', }, '/twitter/callback':{ controller:'LoginController', action:'twitterCallback', }, Perceba que a URL de callback deve bater com a URL de callback que voce cadastrou no Twitter app.Depois, vamos instalar o modulo do passport de conexao com o Twitter...npm install --save passport-twitter... e atualizar o arquivo passport.js:passport.use(new TwitterStrategy({ consumerKey: config.secret.twitter.consumer_key, consumerSecret: config.secret.twitter.consumer_secret, callbackURL: config.secret.twitter.callback_url, }, function(token, tokenSecret, profile, done){ process.nextTick(function(){ console.log(profile); User.findOne({'auth.twitter.id':profile.id}, function(err, user){ if(err) return done(err); if(user){ return done(null, user); }else{ var newUser=new User(); newUser.auth.twitter.id=profile.id; newUser.auth.twitter.token=token; newUser.auth.twitter.username=profile.username; newUser.auth.twitter.displayName=profile.displayName; newUser.save(function(err){ if(err) throw err; return done(null, newUser) }); } }); }); })); Perceba que o codigo e muito parecido com a estrategia de signup local.Depois, atualizaremos o controller de login:twitterConnect: passport.authenticate('twitter'), twitterCallback: passport.authenticate('twitter', { successRedirect: '/dashboard', failureRedirect: '/', }), Para finalizar, vamos atualizar as views para que a autenticacao fique completa:No arquivo views/index.hbs, logo abaixo do link de signup, adicione a seguinte linha: <a href="/twitter/connect" class="btn btn-info"><span class="fa fa-twitter"></span> Twitter</a>No arquivo views\dashboard.hbs, adicione o seguinte bloco, apos a div das informacoes locais:<!--Twitter Information--> <div class="col-sm-6"> <div class="well"> <h3 class="text-info"><span class="fa fa-twitter"></span> Twitter</h3> <p> <strong>id</strong>: {{user.auth.twitter.id}}<br/> <strong>token</strong>: {{user.auth.twitter.token}}<br/> <strong>username</strong>: {{user.auth.twitter.username}}<br/> <strong>displayName</strong>: {{user.auth.twitter.displayName}}<br/> </p> </div> </div> Agora, basta executar a aplicacao. Porem, o codigo nao vai funcionar se digitarmos localhost:3000. Isso porque o Twitter nao reconhece a palavra localhost. Entao daqui por diante, vamos usar a url por ip para os nossos testes (http://127.0.0.1:3000)Apos clicar no botao do twitter, voce sera redirecionado para a pagina de autorizacao do aplicativo. Apos confirmar, voce sera redirecionado para o dashboard, que vai ficar assim:Perceba que a area local esta com o email e senha em branco. Isso porque a conta do twitter e a conta local estao separadas (o ID local na verdade e o ID do MongoDB do registro dos dados do Twitter). Deste modo, no banco, temos armazenados 2 usuarios:Usuario A, que e o usuario cadastrado pela autenticacao local;Usuario B, que e o usuario cadastrado pela autenticacao via Twitter.Na figura abaixo, vemos como esta a situacao atual do nosso banco:De fato, nos nunca fizemos nenhum mecanismo de associacao de contas. Assim, precisamos criar um mecanismo para associar todas as contas em uma so.Primeiro, vamos preparar o terreno para a autenticacao local (Depois expandimos para as proximas) criando 2 novas rotas:/local/link (get e post)/local/unlinkNo arquivo config/routes.js,