Agora, so falta adicionarmos a rota para o dashboard: '/dashboard':{ controller:'DashboardController', action:'index', }, Agora sim, inicie a aplicacao e logue normalmente. A seguinte tela aparecera para o dashboard:Policies e LogoutTa tudo muito bom, mas ainda temos 2 problemas pra resolver. O primeiro, e mais simples: O botao de logout nao esta funcionando. O segundo e um pouco mais complicado: Podemos acessar o dashboard mesmo sem nos logarmos no sistema. Mas vamos resolver primeiro o do logout. Basta criarmos a action no controller de login... signout: function(req,res){ req.logout(); // ja fornecida pelo passport res.redirect('/'); // redireciona para a raiz. }, ... e criar a rota correspondente. '/signout':{ controller:'LoginController', action:'signout', }, Agora tudo deve funcionar legal. O ultimo problema e com relacao ao acesso privado ao dashboard. Precisamos criar algum mecanismo que impeca o acesso nao autorizado. Felizmente, o express suporta diversos middlewares e funcoes encadeadas. Assim, podemos criar um framework de policies que serao disparadas antes da funcao principal da rota. A primeira coisa e criar uma pasta chamada policies dentro da pasta config. Depois, criamos um arquivo chamado isAuthenticated.js dentro desta nova pasta com o seguinte conteudo:module.exports=function(req,res,next){ if(req.isAuthenticated()){ // avanca para a proxima funcao da rota, que sera a funcao principal. return next(); }else{ // avanca para a proxima ROTA. Como nao existe uma rota encadeada nem um redirect, // a proxima rota e a 404 (page not found), que serve para os nossos propositos de bloqueio. return next('route'); } }; Depois, adicionamos o nome do arquivo criado na rota do dashboard, do arquivo config/routes,js:'/dashboard':{ controller:'DashboardController', action:'index', policy:'isAuthenticated', }, A ideia aqui e carregar o nome do arquivo de politicas (policies) antes da funcao principal da rota ser chamada. Para isso, modificaremos o codigo presente no arquivo lib/route_loader.js. Modificamos somente a parte final da funcao, que vai ficar assim:... var controller_filename=route.controller; var action_name=route.action; var policy_name=route.policy; // caso a policy nao tenha sido declarada var policy=undefined; if(!policy_name){ console.log("[WARNING] Policy nao declarada para esta rota. Utilizando a policy padrao (sem restricoes)."); policy=function(req,res,next){ return next() }; }else{ try{ policy=require(policies_folder+'/'+policy_name+'.js'); }catch(err){ throw new Error("Arquivo nao encontrado: "+policy_name); } } // carregando a rota var controller=require(controllers_folder+"/"+controller_filename+".js"); app[method](url, policy, controller[action_name]); ... Agora, quando a aplicacao e executada, so sera permitido o acesso ao dashboard para os usuarios logados. Caso sua permissao seja negada, sera exibida a pagina 404. Aproveite para adicionar esta mesma policy na rota de signout, para prevenir problemas.Com isso, encerramos a etapa de arquitetura e organizacao do codigo para uma aplicacao node.js. Nos posts seguintes (que serao mais curtos), serao apenas complementos ao codigo atual, inserindo logins pelo Facebook, Twitter e demais formas de autenticacao, explorando todas as possibilidades do passport.Inte.Demais posts desta serie:Setup LocalAutenticacao via Twitter e unindo contasAutenticacao via GoogleAutenticacao via Facebook