Pergunta


A) Por que, quando o uso de modelos com CreateUserWizard controle, não incluindo caixa de texto com ID = Email depender se CreateUserWizard. RequireEmail propriedade é definida como verdade, mas TextBox com ID = pergunta é necessário apenas se subjacente provedor de associação requer pergunta de senha? Em outras palavras, por que não também ser de até subjacente provedor de associação para decidir se caixa de texto ( com ID = e-mail ) é necessária?


B) Por outro lado, por que seria até provedor de associação para decidir se pergunta de senha é necessária? Isso não deveria ser até classe Membership para decidir? Afinal, o trabalho de provedor de associação deve ser apenas para fornecer acesso ao armazenamento de dados subjacente, e não para decidir o que os usuários de dados deve fornecer?!


thanx


EDIT:

A)

Tudo se resume ao fato de que o provedor de associação tem um mapeamento óbvio:. RequiresQuestionAndAnswer, que você pode definir e ter este forçado, mas você não pode especificar que o usuário deve fornecer um endereço de e-mail

Assim RequiresUniqueEmail em essência diz que o usuário não tem que especificar um endereço de e-mail, mas se ela acontecer, ele deve ser exclusivo?


B)

  • Se eu entendi provedores de associação corretamente, eles são as entidades que as consultas de envio SQL para armazenamento de dados ?! Assim eu suponho que eles têm pleno conhecimento de tabelas e relacionamentos etc este armazenamento de dados tem?

  • Mas ainda assim, o que se armazenamento de dados não tem uma coluna para armazenar endereços de e-mail, mas CreateUser () especifica o endereço de email como um de seus parâmetros? Como o provedor de associação lidar com isso?

Foi útil?

Solução

É um ponto interessante que o email é parte dos campos de dados esperados.

Deixe-me esclarecer ... se você definir RequiresUniqueEmail a verdade para o provedor SQL, o e-mail não será obrigado --strictly falando. Significa apenas que cada usuário terá que usar um endereço de email diferente de qualquer outro usuário. Portanto, não pode ser um usuário sem um endereço de e-mail. Um valor nulo será definido no banco de dados. Mas nenhum outro usuário seria capaz de omitir o endereço de e-mail depois disso, porque isso faria com que dois usuários para ter e-mails nulos ... Então funcionalmente assim como ele pode ser o mesmo que os endereços de e-mail necessários, mas não é tecnicamente o mesmo.

Os controles do assistente fornecer uma interface de usuário padrão para a recolha de informação da sociedade, e ele assume que você uso estará usando o provedor SQL padrão. Se você não estiver usando o provedor padrão, o seu provedor não suporta todos os campos, ou você tem outras restrições exclusivas em seu provedor, então você deve personalizar os passos do assistente com os seus próprios modelos e lidar com eventos do assistente para fornecer suas próprias validações e lógica adicional conforme apropriado.

Como para compreender a si mesmo ...

sistema Membership

O sistema Membership em asp.net é um compromisso entre o design OO rigorosa e conveniência. Existem algumas hipóteses na classe base MembershipProvider a partir do qual os provedores de associação específicos herdam que são presunçoso. O fato de que os endereços de e-mail será parte dos dados de filiação em um dos pressupostos mais liberais do provedor de base faz.

Ao fazer essa suposição, porém, o que é verdade na maioria dos ambientes, o sistema de adesão é capaz de expor algumas funcionalidades relacionadas com endereços de email em uma maneira simples e intuitiva (tais como a obtenção de um usuário pelo seu endereço de e-mail em vez do nome de usuário e proibindo várias contas com o mesmo endereço de email). Se a classe base não fazer essa suposição, em seguida, cada vez que você queria fazer coisas com e-mails em seu provedor específico, você tem que lançar a referência para o tipo específico que você está usando dentro de sua aplicação. Isso é complicado.

Do ponto OO puramente de vista, estes pressupostos são desconfortáveis. Mas você pode, e muitos provedores de associação fazem, fornecer implementações vazias para métodos e propriedades da classe base, se eles não usá-los.

Você vê isso mais com provedores de função ... por exemplo, o provedor de função de token do Windows tem um monte de membros que NotImplmentedException throw (o provedor de função de token é um provedor de somente leitura para AD, para que todos os assessores da propriedade conjunto de jogar exceções).

Outras dicas

Tudo se resume ao fato de que o provedor de associação tem um mapeamento óbvio: RequiresQuestionAndAnswer , que você pode definir e ter esta imposta, mas não é possível especificar que o usuário deve fornecer um endereço de e-mail.

especificando que eles devem fornecer um endereço de e-mail exclusivo com RequiresUniqueEmail não é o mesmo que dizer 'requer um e-mail' - assim o CreateUserWizard está oferecendo a você a opção de dizer" eu não me importo que os endereços de e-mail não são exclusivos, só que há um ".

Quanto ao porquê do provedor de associação deve controlar se uma pergunta é necessária: É porque o provedor também está controlando coisas como EnablePasswordReset e EnablePasswordRetrieval - estas são coisas que a classe memebership não tem conhecimento de - na verdade, mesmo que a classe de membresia tem um método " ValidateUser " , ele irá usar o provedor padrão especificado no web.config para fazer isso:

A classe Membership depende de provedores de associação para se comunicar com uma fonte de dados.


Em resposta à pergunta edições:

a. Isso está correto, como pontos Stephen fora , você poderia ter um usuário com um endereço de e-mail vazio, e depois todos os outros teriam de ter um valor. Dependendo de suas validadores, isso realmente não tem que ser um email válido addres.

b.1. Não é bem assim - Os prestadores de enviar dados de e para o armazenamento de dados do usuário - isso pode ser SQL, mas também poderia ser Active Directory, LDAP, um arquivo de texto, etc, mas sim, o seu provedor atua como a camada de separação entre sua aplicação e sua loja de usuário.

b.2. Há muitas partes da adesão - a documentação relativa implementar um costume participação do usuário leva você através dos passos necessários para criar um usuário personalizada - se o seu armazenamento de dados não lidar com endereços de e-mail (ou você queria vários e-mails armazenados em um perfil), então o seu fornecedor poderia simplesmente ignorar qualquer valor enviado através de você em criar ou atualizar e preenchê-lo com nulo no get.

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