Pergunta

Em um site, eu preciso integrar associação e autenticação. Então eu quero usar a funcionalidade do ASP.NET Membership, mas eu tenho outras coisas costume que um "usuário" tem que fazer.

Então, eu estou sentado aqui com o meu lápis e papel, desenhar linhas para o meu modelo de domínio ... E como eu posso utilizar melhor os membros ASP.Net, mas estendê-lo para preencher minhas necessidades?

Devo criar uma classe que herda de um MembershipUser e estendê-lo com minhas próprias propriedades e métodos (e salvar isso em uma mesa separada). Ou devo deixar o MembershipUser ser uma propriedade no meu costume usuário objeto / cliente?

O que seria uma boa maneira sólida para fazer isso?

Foi útil?

Solução

Eu pensei sobre isso e há 2 maneiras que parecem apropriado (é claro que existem outras maneiras de fazê-lo funcionar).

provedor personalizado Membership

Você pode alterar o provedor de associação para usar o seu próprio e usar seu objeto de usuário para armazenar todas as informações.

O problema com este é que ele envolve uma série de re-implementação de coisas que já são bem tratado por Asp.Net. A coisa boa é que você tem um único objeto de usuário com todos os detalhes.

Fazer a ligação a partir de um usuário da associação para o usuário

Com este método, você usaria o provedor de associação original para lidar com o nome de usuário e senha, mas você ligar o seu próprio objeto de usuário com um presente com algo parecido com o nome de usuário usando um serviço, por exemplo.

É muito fácil de configurar, você só precisa criar um serviço que seria usado como este:

string userName = "Jon Skeet";
User user = new UserManagementServices().GetUserByUserName(userName);

Outras dicas

acabei escrevendo minha própria assinatura de provedor, e implementaram que em 3 soluções separadas agora. É extremamente simples e muito, muito mais elegante do que vincular um usuário a um MembershipUser (que eu também tentei).

Leia este ...:

Criar provedor de associação personalizado para ASP.NET Web site de Segurança

E se você quiser saber mais, assista este vídeo (com código fonte) .

Eu estendida MembershipUser e criei minha própria versão do SqlMembershipProvider para mapear para o meu domínio existente, e seu trabalho bem, na produção agora.

MembershipUser é essencialmente uma vista sobre minha mesa do usuário. Minha classe MembershipUser estendida inclui propriedades perfil / conta de estilo em vez de usar o sistema SqlProfileProvider padrão, que é um pouco frágil.

Eu não era capaz de usar as tabelas ou sprocs adesão existentes, mas escrevi o meu próprio. Por exemplo, o SqlMembershipProvider usa um GUID como chave opaco, mas o sistema de produção utiliza um int velho liso. Todas as datas são UTC, etc. também.

Toda a funcionalidade do usuário extra é acessado através do domínio usuário não através de métodos de adesão.

HTH.

Atualmente estou trabalhando através do Microsoft ASP.NET 2.0 Membership API Extensão artigo a partir do código Magazine, que explica como estender a API associação escrevendo um invólucro em torno das classes existentes. principal benefício é que você pode manter todo o para fora da funcionalidade caixa e não ter que reescrever seu próprio como você ao implementar um provedor personalizado. O código-fonte é fornecido.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top