return done(null, newUser, true, req.flash('signupMessage', 'Usuario cadastrado com sucesso.')); }); } }); }); }); // fim da estrategia para o signup.}; Agora, so precisamos ligar esta estrategia ao controller e as rotas. Primeiro, Criamos a rota de signup para o metodo POST no arquivo de rotas: 'POST /signup':{ controller:'LoginController', action:'cadastroUsuario', }, Depois, criamos a action correspondente no controller de login. Note que chamamos o metodo passport.authenticate, que utiliza a estrategia definida anteriormente no arquivo passport.js. Nao se esqueca de chamar o passport na primeira linha do arquivo (var passport = require('passport')) cadastroUsuario:passport.authenticate('local-signup',{ successRedirect:'/dashboard', // em caso de sucesso, redirecione para esta rota. failureRedirect:'/local/signup', // Em caso de falha, redirecione para esta rota failureFlash:true //allow flash messages }), Agora, so falta ligarmos tudo no arquivo app.js. Antes das rotas, adicione as seguintes linhas:/**************** *** PASSPORT *** ****************/ require('./lib/passport')(passport); app.use(require('express-session')({secret: 'qualquercoisaksadnckjadscdscdscndc'})); app.use(passport.initialize()); app.use(passport.session()); Porem, existe uma configuracao extra que vamos fazer. Quando o login der errado por algum motivo, e exibida uma mensagem flash. Portanto, precisamos configura-la. Primeiro, precisamos instalar o pacote connect-flash:npm install --save connect-flashDepois, no arquivo app.js, adicionamos as seguintes linhas, abaixo da secao das configuracoes do passport:/********************** *** FLASH MESSAGES *** **********************/ app.use(require('connect-flash')()); Se tudo deu certo, quando executarmos a operacao e cadastrarmos um usuario qualquer, teremos esta tela:WTF??Deu certo mas deu errado?? Porressa?!Calma, jovem gafanhoto. Ainda nao configuramos a rota e nem o login do Dashboard, que e a rota acionada caso o cadastro tenha sido bem sucedido. Vamos resolver isso daqui a pouco. Primeiro, volte para a pagina de signup e tente cadastrar o mesmo usuario de novo. Possivelmente sua tela sera essa:Provando que o usuario nao foi cadastrado, se nos olharmos no banco (eu olhei via robomongo, usando como autenticacao as mesmas credenciais da aplicacao), obtemos esta tela:Ou seja: IT'S ALIVE! :DLogin e DashboardAgora, vamos adicionar a estrategia para login, que chamaremos de local-signin. Coloque o seguinte codigo logo abaixo da estrategia do signup: passport.use('local-signin', new LocalStrategy({ usernameField: 'email', passwordField: 'password', passReqToCallback: true }, function(req,email,password,done){ User.findOne({'auth.local.email':email}, function(err,user){ if(err) return done(err); if(!user) return done(null, false, req.flash('signinMessage', 'Usuario nao encontrado')); if(!user.checkPassword(password)) return done(null, false, req.flash('signinMessage', 'Senha incorreta')); return done(null, user); }); })); Depois, no LoginController, adicione: login:passport.authenticate('local-signin',{ successRedirect:'/dashboard', failureRedirect:'/local/signin', failureFlash: true }), E pra finalizar, no arquivo config/routes.js, adicione:'POST /signin':{ controller:'LoginController', action:'login', }, Para testar, acesse http://localhost:3000/signin e faca 3 testes: primeiro, teste acessar com um usuario que nao existe. Esta tela deve aparecer:Depois, teste com a senha errada. A seguinte tela aparecera:E, e claro que voce ja deve ter adivinhado o que vai acontecer se voce digitar tudo corretamente. :D. Portanto, para resolver esse problema, vamos arrumar logo essa pagina do dashboard. Primeiro, vamos criar a view (views/dashboard.hbs):<div class="container"> <div class="page-header text-center"> <h1><span class="fa fa-anchor"></span> Dashboard</h1> <a href="/signout" class="btn btn-default btn-sm">Logout</a> <div class="row"> <!--Local information--> <div class="col-sm-6"> <div class="well"> <h3><span class="fa fa-user"></span> Local</h3> <p> <strong>id</strong>: {{user._id}}<br/> <strong>email</strong>: {{user.auth.local.email}}<br/> <strong>password</strong>: {{user.auth.local.password}}<br/> </p> </div> </div> </div> </div> </div>Depois, criamos um controller exclusivo para o dashboard, ja que e uma outra area da aplicacao:var DashboardController={ index:function(req,res){ // o passport automaticamente coloca na requisicao o usuario logado res.render('dashboard', {user: req.user}); } }; module.exports=DashboardController;