Acabei combinando meu fluxo de trabalho original com o exemplo de autenticação do Express, visto aqui . É o seguinte:
- Quando o usuário carrega inicialmente o aplicativo, uma chamada http é feita para um terminal Express que verifica se já existe uma sessão para o usuário. Nesse caso, o usuário é armazenado em
$rootScopee considerado conectado. - Sempre que a rota AngularJS muda, o mesmo endpoint é acessado. A proteção de rota foi especificada de maneira semelhante à descrita aqui
. Se o endpoint retornar que não existe nenhuma sessão,
$rootScope.usernão está definido (se necessário) e o usuário é redirecionado para a página de login. - Quando o formulário de login é processado, ele é enviado para um terminal Express. O endpoint recupera o usuário do mongoDB (se existir) e tenta fazer o hash da senha. Se for uma correspondência, a sessão do usuário é definida, armazenada no mongo DB e o endpoint retorna o
userobjeto (usado para armazenar no $rootScope como mencionado anteriormente). - Sempre que outros endpoints são acessados, as funções são passadas primeiro pelo
restrictfunção que garante que existe uma sessão antes de enviar quaisquer dados para o cliente. Ele retorna um401se não existir nenhuma sessão, que é tratada no lado Angular usando este interceptador HTTP para desarmar$rootScope.usere redirecionar para a tela de login. - Quando o usuário clica em "sair" no lado Angular, a sessão é desativada e excluída do banco de dados mongo,
$rootScope.useré definido como nulo e o usuário é redirecionado de volta para a página inicial.