controle de login do asp.net (membership) - DÚVIDAS DE INICI
14/03/2008
0
Estou iniciando no asp.nset e estou construindo um site que vai possuir autenticação. Conheci a ferramenta de controle de acesso do asp e estou tentando utilizá-la, mas tenho duas dúvidas:
1)Como altero o esquema de senha utilizado(default)? Por exemplo, diminuir a quantidade de caracteres, exigir letras e números, etc...
2)Como alterar as informações do usuário? Na ferramenta de registro são exigidas poucas informações. Eu quero exigir mais informações quando um usuário for criado (endereço, telefone, etc...). Inclusive, não adianta só alterar no wizard de criação de usuários, tenho também que alterar a tabela para adicionar essas informações.
Alguém consegue me ajudar????
Gandja2005
Posts
17/03/2008
Hugoestevam
Sua primeira dúvida pode ser resolvida mudando os valores no Web.config de seu projeto, na tag ´<membership>´ que configura seu provider, como mostra o código abaixo:
<authentication mode="Forms" /> <membership defaultProvider="AspNetSqlMembershipProvider"> <providers> <clear/> <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="TesteConexao" applicationName="WebSites1" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Hashed" minRequiredNonalphanumericCharacters="0" minRequiredPasswordLength="4" /> </providers> </membership>
Para um melhor entendimento do código acima, leia o seguinte artigo:
[url]http://www.bufaloinfo.com.br/artigos/coluna32.asp[/url]
Sua segunda dúvida, é um pouco complicada, vou expor minha idéia sobre isso.
O sistema de Membership do .NET é realmente muito bom e eu não recomendo a ninguém personaliza-lo com o objetivo de alterar seu modelo de dados... todos os projetos que observei tentando fazer isso, na época do surgimento do .NET 2.0, voltaram atrás e passaram a simplesmente usar o membership padrão...
A questão é a seguinte : o sistema de membership do .NET é um sistema de autenticação. Até ai eu não disse nada, mas se observarmos o tipo de informação que este sistema trata, vai ficar mais claro :
- data do ultimo login
- data da ultima troca de senha
- data da ultima tentativa de login errada
- quantidade de tentativas de login erradas
etc.
Como pode ver, são dados que normalmente não prevemos em nossos bancos de dados. Talvez a única coisa que haja em comum entre nossas tabelas de dados e o sistema de membership seja o login e senha.
Por isso, personalizar o membership para incluir os nossos dados é misturar dados de negócio com dados de autenticação - que são coisas diferentes. Portanto, não é a melhor solução.
A melhor solução é deixar o membership em sua configuração default e manter os seus dados cadastrais do usuário no seu banco(Você pode manter um relacionamento entre a tabela ´user´ do membership e uma tabela ´pessoa´ que armazene as informações desejadas, esse relacionamento pode ser feito através do campo UserId do tipo uniqueidentifier). As duas tabelas vão possuir um ´relacionamento virtual´ gerado pelo login do usuário. A partir do momento que o usuário está logado, você recupera os dados de negócio dele.
Quanto ao cadastramento, você personaliza o createuserWizard, adicionando novos steps no createuserWizard de forma que seus dados também apareçam como parte dos passos do cadastramento. Para ficar fácil, você pode até inserir o createUserWizard dentro de um formview vinculado a um sqlDataSource.
Após o evento CreatedUser, onde o usuário de membership foi criado, você dispara o método insert do formview e este vai fazer o cadastramento dos dados adicionais na sua base, tudo de forma sincronizada.
Espero que ajude.
24/06/2008
Rodrigodefreitasoliveira
Tenho uma tabela Cliente e preciso relaciona-la com a aspnet_membership e aspnet_membershipusers e sempre dá erro
The INSERT statement conflicted with the FOREIGN KEY constraint ´FK_Cliente_aspnet_Users´. The conflict occurred in database ´arnetwork´, table ´dbo.aspnet_Users´, column ´UserId´.
The statement has been terminated.
25/06/2008
Luizitatiba
No Caso do Profile Provider pode sêr salvo os dados de sua aplicação na propria table aspnet_application do ASPNETDB, através do Método Class ProfileCommon (Obs. esse método pelo menos até agora pelo meus estudos só é acessivel no Intelissense do VS2005 em ASP.NET WEBSITE e não em WebApplication Project, no qual ele não reconhece.dê uma pesquisada sobre ProfileProvider aqui mesmo no DevMedia, existem muitos artigos falando sobre isso
No Caso da Customização do MemberShip você mesmo personaliza a sua classa no evento CreateUser herdado da classe MemberShip e o adapta a sua table e base de dados á seu gosto, dê uma pesquisada em Customização de MemberShipProvider aqui mesmo no DevMedia, existem muitos artigos falando sobre isso
Clique aqui para fazer login e interagir na Comunidade :)