Existem bibliotecas de autenticação de usuário existentes para node.js? Em particular, estou procurando algo que possa fazer autenticação de senha para um usuário (usando um banco de dados de autenticação de back-end personalizado) e associe esse usuário a uma sessão.
Antes de escrever uma biblioteca de autenticação, imaginei que as pessoas sabiam das bibliotecas existentes. Não foi possível encontrar nada óbvio através de uma pesquisa no google.
-Shreyas
omniauth
(trilhos) ou pythonsocial-auth
. Os usuários de PHP (e outras linguagens comuns de servidores da web) devem se sentir à vontade para adicionar seus equivalentes também.Respostas:
Se você estiver procurando uma estrutura de autenticação para o Connect ou Express, vale a pena investigar o Passport: https://github.com/jaredhanson/passport
(Divulgação: eu sou o desenvolvedor do Passport)
Desenvolvi o Passport depois de investigar o connect-auth e everyauth. Embora os dois sejam ótimos módulos, eles não atendiam às minhas necessidades. Eu queria algo que fosse mais leve e discreto.
O Passport é dividido em módulos separados, para que você possa usar apenas o que precisa (OAuth, apenas se necessário). O Passport também não monta nenhuma rota em seu aplicativo, oferecendo a flexibilidade de decidir quando e onde você deseja autenticação e ganchos para controlar o que acontece quando a autenticação é bem-sucedida ou falha.
Por exemplo, aqui está o processo de duas etapas para configurar a autenticação baseada em formulário (nome de usuário e senha):
Estratégias adicionais estão disponíveis para autenticação via Facebook, Twitter, etc. Estratégias personalizadas podem ser conectadas, se necessário.
fonte
done(null,false,{ message:'Incorrect username.' })
é terrível, pois não sabemos quais são todos esses parâmetros.Sessão + Se
Eu acho que o motivo de você não encontrar muitas boas bibliotecas é que o uso de uma biblioteca para autenticação é mais do que modificado.
O que você está procurando é apenas um fichário de sessão :) Uma sessão com:
é isso aí.
Discordo da sua conclusão de que o plugin connect-auth é o caminho a seguir.
Também estou usando o connect, mas não uso o connect-auth por dois motivos:
O IMHO quebra o connect-auth, a arquitetura muito poderosa e fácil de ler do anel de cebola do connect. Um não-go - minha opinião :). Você pode encontrar um artigo muito bom e breve sobre como funciona a conexão e a idéia do anel de cebola aqui .
Se você - como está escrito - deseja apenas usar um login básico ou http com banco de dados ou arquivo. A autenticação de conexão é muito grande. É mais para coisas como OAuth 1.0, OAuth 2.0 & Co
Uma autenticação muito simples com o connect
(Está completo. Basta executá-lo para teste, mas se você quiser usá-lo em produção, certifique-se de usar https). você muda um estado :)
NOTA
Eu escrevi essa declaração há mais de um ano e atualmente não tenho projetos de nós ativos. Portanto, pode haver alterações de API no Express. Por favor, adicione um comentário se eu devo mudar alguma coisa.
fonte
Parece que o plug-in connect-auth para o middleware connect é exatamente o que eu preciso: http://wiki.github.com/ciaranj/connect-auth/creating-a-form-based-strategy
Estou usando o express [ http://expressjs.com ] para que o plug-in de conexão se encaixe muito bem, pois o express é subclassificado (ok - prototipado) do connect
fonte
Eu estava basicamente procurando a mesma coisa. Especificamente, eu queria o seguinte:
O que acabei fazendo foi criar minha própria função de middleware,
check_auth
que passo como argumento para cada rota que quero que seja autenticada.check_auth
apenas verifica a sessão e, se o usuário não está logado, redireciona-o para a página de login, da seguinte forma:Então, para cada rota, garanto que essa função seja passada como middleware. Por exemplo:
Finalmente, precisamos realmente lidar com o processo de login. Isto é direto:
De qualquer forma, essa abordagem foi projetada principalmente para ser flexível e simples. Tenho certeza que existem várias maneiras de melhorá-lo. Se você tiver algum, eu gostaria muito do seu feedback.
EDIT: Este é um exemplo simplificado. Em um sistema de produção, você nunca deseja armazenar e comparar senhas em texto sem formatação. Como comenta um comentarista, existem bibliotecas que podem ajudar a gerenciar a segurança da senha.
fonte
Também ter um olhar para everyauth se você quiser / integração de login rede social de terceiros.
fonte
Aqui está um código para autenticação básica de um dos meus projetos. Eu o uso no CouchDB com um cache de dados de autenticação adicional, mas retirei esse código.
Coloque um método de autenticação em torno de você solicitando a manipulação e forneça um segundo retorno de chamada para autenticação sem êxito. O retorno de chamada com êxito obterá o nome de usuário como um parâmetro adicional. Não se esqueça de lidar corretamente com solicitações com credenciais ausentes ou erradas no retorno de chamada com falha:
fonte
Uma abordagem diferente da autenticação é o Passwordless, um módulo de autenticação baseado em token que expressa o que contorna o problema inerente às senhas [1]. É rápido de implementar, não requer muitos formulários e oferece melhor segurança para o usuário médio (divulgação completa: sou o autor).
[1]: as senhas são obsoletas
fonte
Alguns anos se passaram e eu gostaria de apresentar minha solução de autenticação para o Express. Chama-se Lockit . Você pode encontrar o projeto no GitHub e uma breve introdução no meu blog .
Então, quais são as diferenças para as soluções existentes?
require('lockit')
,lockit(app)
, feitousername
epassword
.Veja os exemplos .
fonte
Existe um projeto chamado Drywall que implementa um sistema de login do usuário com o Passport e também possui um painel de gerenciamento de usuários. Se você está procurando um sistema de gerenciamento e autenticação de usuário completo, semelhante a algo que o Django possui, mas o Node.js, é isso. Eu achei que era um bom ponto de partida para criar um aplicativo de nó que exigisse um sistema de autenticação e gerenciamento de usuários. Veja a resposta de Jared Hanson para obter informações sobre como o Passport funciona.
fonte
Aqui estão duas bibliotecas populares do Github para autenticação do nó js:
https://github.com/jaredhanson/passport (sugerível)
https://nodejsmodules.org/pkg/everyauth
fonte
Exemplo simples e rápido usando mongo, para uma API que fornece autenticação de usuário para, por exemplo, cliente Angular
no app.js
para sua rota, algo como isto:
Em suas rotas que exigem autenticação, basta verificar a sessão do usuário:
fonte
Aqui está uma nova biblioteca de autenticação que usa tokens com registro de data e hora. Os tokens podem ser enviados por email ou texto para os usuários sem a necessidade de armazená-los em um banco de dados. Pode ser usado para autenticação sem senha ou para autenticação de dois fatores.
https://github.com/vote539/easy-no-password
Divulgação: eu sou o desenvolvedor desta biblioteca.
fonte
Se você precisar de autenticação com o SSO (Logon único) com a conta de usuário do Microsoft Windows. Você pode tentar https://github.com/jlguenego/node-expose-sspi .
Ele fornecerá um
req.sso
objeto que contém todas as informações do usuário do cliente (login, nome para exibição, sid, grupos).Isenção de responsabilidade: eu sou o autor do node-expose-sspi.
fonte
sweet-auth
Um módulo de autenticação de usuário leve e com configuração zero. Ele não precisa de um banco de dados separado.
https://www.npmjs.com/package/sweet-auth
É simples como:
fonte