Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

jrcesar

Forçar usuario a trocar senha (membership)

Recommended Posts

Tudo bem?

 

É o seguinte, estou me baseando neste artigo do Dennes Torres http://www.bufaloinfo.com.br/artigos/artigo02032007.asp , mas estou desenvolvendo em C# e usando o VS2008. Estou com um pouco de dificuldade na conversão de código e algumas duvidas em relação ao código.

 

neste caso esta me mostrando um erro que contem argumentos invalidos.

 

 

public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
		{
			MembershipUser user;
			
			//nesta linha
			user = base.CreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey, status);
			user.Comment = "Trocar";
			UpdateUser(user);
			return (user);
		}

aqui estou com problema de conversão de vb para c#

 

primeiro não consegui achar a referencia: using System.Web.HttpContext;

 

segundo seria a conversão do codigo, aqui vai o código em vb.

 

Public Sub Dispose() Implements System.Web.IHttpModule.Dispose

End Sub

Public Sub Init(ByVal context As System.Web.HttpApplication) Implements System.Web.IHttpModule.Init
		AddHandler context.PostAuthenticateRequest, AddressOf autenticou

 End Sub


Sub autenticou(ByVal sender As Object, ByVal e As EventArgs)

		With Current

			If .User.Identity.IsAuthenticated Then

				Dim user As MembershipUser

				user = Membership.GetUser()

				If user.Comment = "Trocar" Then

					If .Request.Url.ToString.IndexOf("TrocarSenha") = -1 Then

						.Response.Redirect("TrocarSenha.aspx?URL=" & .Server.UrlEncode(.Request.Url.ToString))

 

						.Response.End()

					End If

				End If

			End If

		End With

	End Sub

 

 

 

 

 

Só que eu ja uso um provider para trabalhar com o membership, então no web.config eu teria dois providers. Como saberei qual usar?

 

O que eu uso como padrão é o que é nativo, e o segundo é do artigo do Dennes Torres.

 

<membership defaultProvider="SqlMembershipProvider">
	  <providers>
		<clear/>
		<add name="SqlMembershipProvider"
			 type="System.Web.Security.SqlMembershipProvider"
			 connectionStringName="connstrBDSISTEMAWEB"
			 applicationName="SISTEMAWEB"
			 enablePasswordRetrieval="false" 
			 enablePasswordReset="true"
			 requiresQuestionAndAnswer="false"
			 requiresUniqueEmail="false"
			 passwordFormat="Hashed"
			 minRequiredNonalphanumericCharacters="1"
			 minRequiredPasswordLength="8"/>

		<add name="MeuProvider"
			 type="clNovoMembership.MembershipTrocaSenha"
			 connectionStringName="connstrBDSISTEMAWEB"
			 enablePasswordRetrieval="false"
			 enablePasswordReset="true"
			 requiresQuestionAndAnswer="false"
			 applicationName="SISTEMAWEB"
			 requiresUniqueEmail="false"
			 passwordFormat="Hashed"
			 maxInvalidPasswordAttempts="5"
			 minRequiredPasswordLength="8"
			 minRequiredNonalphanumericCharacters="1"
			 passwordAttemptWindow="10"
			 passwordStrengthRegularExpression=""/>
	  </providers>
	</membership>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro do primeiro código que no using?

using System.Web.HttpContext;

HttpContext é uma classe, não tem como dar using nela.

 

Sobre a conversão, tente assim:

public void Init(HttpApplication context)
{
	context.PostAuthenticateRequest += new EventHandler(autenticou);
}

public void autenticou(object sender, EventArgs e)
{
	if (HttpContext.Current.User.Identity.IsAuthenticated)
	{
		MembershipUser user = Membership.GetUser();
		if (user.Comment == "Trocar")
		{
			if (HttpContext.Current.Request.Url.ToString().IndexOf("TrocarSenha") == -1)
			{
				HttpContext.Current.Response.Redirect("TrocarSenha.aspx?URL=" + HttpContext.Current.Server.UrlEncode(HttpContext.Current.Request.Url.ToString()));
				HttpContext.Current.Response.End();
			}
		}
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro do primeiro código que no using?

using System.Web.HttpContext;

HttpContext é uma classe, não tem como dar using nela.

 

Sobre a conversão, tente assim:

public void Init(HttpApplication context)
{
	context.PostAuthenticateRequest += new EventHandler(autenticou);
}

public void autenticou(object sender, EventArgs e)
{
	if (HttpContext.Current.User.Identity.IsAuthenticated)
	{
		MembershipUser user = Membership.GetUser();
		if (user.Comment == "Trocar")
		{
			if (HttpContext.Current.Request.Url.ToString().IndexOf("TrocarSenha") == -1)
			{
				HttpContext.Current.Response.Redirect("TrocarSenha.aspx?URL=" + HttpContext.Current.Server.UrlEncode(HttpContext.Current.Request.Url.ToString()));
				HttpContext.Current.Response.End();
			}
		}
	}
}
Olá obrigado por me ajudar.

Quero que no momento que o usuario faça o primeiro login , ele tenha que fazer a troca de senha. Para isso estou me baseando neste artigo do Dennes Torres http://www.bufaloinfo.com.br/artigos/artigo02032007.asp

 

Com relação a os providers, então eu terei que implementar toda a classe membership para que eu possa utiliza-la?

No artigo do Dennes Torres, ele implementa três metodos, que são: CreateUser e dois metodos ChangePassword da classe Membership.

 

Você teria algum exemplo de implementação dos outros metodos para que eu tivesse alguns exemplos?

 

Com relação a troca de senha no momento em que o usuario se logar, você teria alguma solução alternativa para este caso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você customizou o Membership, você só vai precisar do provider customizado.

Por não ser muito fã de Membership (sempre implementei meus próprios mecanismos de autenticação) eu não consigo ir muito além disso.

Fico te devendo essa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.