Posts
Olá, tudo bem?
O envio do email você sabe fazer?
Para validar a conta você vai ter que enviar no link por querystring o usuário e em uma página utilizar o método abaixo.
using System;
using System.Web.Security;
public partial class Membership : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["usuario"] != null)
{
string usuario = Request.QueryString["usuario"].ToString();
MembershipUser usrInfo = System.Web.Security.Membership.GetUser(usuario);
if (usrInfo != null)
{
usrInfo.UnlockUser();
}
}
}
}
Neste momento se ele acessou a página você deve liberar a conta.
Por que você está utilizando Membership? Se fosse um banco seu seria mais fácil fazer.
Fabio
Olá Fabio Galante, prazer vejo muitos de seus artigos e vídeos mas ainda não sei como proceder no envio de email..mas a lógica do que eu preciso fazer seria exatamente o quadro abaixo
1)O Usuário se cadastra via MemberShipProvider mas ele não pode estar autenticado ou sua autenticação validada ainda;
2)Tem que sêr enviado um email com dois links para o cadastrado um link sendo para ele clicar no link e validar o usuário(de preferência na querystring este user estar cryptografado que nem o hotmail fáz) para após ele se logar em seu painel administrativo e o outro link sendo o link do painel administrativo no mesmo email que ele irá se logar posteriormente (o objetivo disto é que não quero esse link aparecendo na pagina e apenas no email do usuário), lembrando que este email tem que ser aceito tb se a pessoa se cadastrar usando email de hotmail, yahoo email para se evitar que esses mecanismos seja pego o SPAM como faria isso tb teria como me dar uma ajudinha
Fico no aguardo de algum exemplo ou vídeo se possivel que me exemplifique de como fz isso
Se o cadastro for feito Membership você deve utilizar MailDefinition para disparar uma mensagem após o cadastro
Primeiro você cria no Web.Config
<system.net>
<mailSettings>
<smtp from=support@mydomain.com>
<network host="mail.mydomain.com" port="25" userName="user@mydomain.com" password="mypassword" defaultCredentials="false" />
</smtp>
</mailSettings>
</system.net>
Em seguida
<asp:CreateUserWizard ID="CreateUserWizard1" Runat="server">
<MailDefinition
BodyFileName="~/RegistrationEmail.txt"
From="http://seussite.com"
Subject="Thanks for registering!">
</MailDefinition>
</asp:CreateUserWizard>
No BodyFileName você pode montar como no exemplo abaixo.
Thank you for registering web site! Follows your credentials for logging-in:
UserName: <% UserName %>
Password: <% Password %>
See you online!
Porém você deve mudar a lógica acima enviando um link para ele confirmar o registro. Uma flag no banco seria interessante.
Espero ter ajudado.
Olá Fábio Galante boa tarde....
Bem vamos por partes em algo que não entendi ainda
Primeiro você cria no Web.Config
<system.net>
<mailSettings>
<smtp from=support@mydomain.com>
<network host="mail.mydomain.com" port="25" userName="user@mydomain.com" password="mypassword" defaultCredentials="false" />
</smtp>
</mailSettings>
</system.net>
Duvida 1 - No web.config, No caso o que seria
network host="mail.mydomain.com"
e
userName="user@mydomain.com"
Em seguida
<asp:CreateUserWizard ID="CreateUserWizard1" Runat="server">
<MailDefinition
BodyFileName="~/RegistrationEmail.txt"
From="http://seussite.com"
Subject="Thanks for registering!">
</MailDefinition>
</asp:CreateUserWizard>
Duvida 2 - Como seria feito acima se estou usando no lugar do controle create user wizard um form comum personalizado com caixas de texto e code-behind por exemplo em csharp
Dúvida 3 - No caso como eu incluiria o link de validação na logica abaixo e um link adicional para a pagina administrativa do usuário
Thank you for registering web site! Follows your credentials for logging-in:
UserName: <% UserName %>
Password: <% Password %>
See you online!
Duvida 4 - E como seria você deve mudar a lógica acima enviando um link para ele confirmar o registro. Uma flag no banco seria interessante? Teria algum exemplo em video ou algo assim para me facilitar
Estou usando o VS2008
Fico no aguardo e desde já agradeço
Duvida 1 - No web.config, No caso o que seria
network host é o smtp, o mesmo que você utiliza para enviar email no seu programa, userName é necessário caso o seu provedor solicite autenticação.
<system.net>
<mailSettings>
<smtp from=support@mydomain.com>
<network host="mail.mydomain.com" port="25" userName="user@mydomain.com" password="mypassword" defaultCredentials="false" />
</smtp>
</mailSettings>
</system.net>
Duvida 1 - No web.config, No caso o que seria
network host="mail.mydomain.com"
e
userName="user@mydomain.com"
Duvida 2 - Como seria feito acima se estou usando no lugar do controle create user wizard um form comum personalizado com caixas de texto e code-behind por exemplo em csharp
É mais fácil ainda, assim que ele criar a conta você cria um método de envio de email, não precisa utilizar o MailDefinition.
Em seguida
<asp:CreateUserWizard ID="CreateUserWizard1" Runat="server">
<MailDefinition
BodyFileName="~/RegistrationEmail.txt"
From="http://seussite.com"
Subject="Thanks for registering!">
</MailDefinition>
</asp:CreateUserWizard>
Duvida 2 - Como seria feito acima se estou usando no lugar do controle create user wizard um form comum personalizado com caixas de texto e code-behind por exemplo em csharp
Dúvida 3 - No caso como eu incluiria o link de validação na logica abaixo e um link adicional para a pagina administrativa do usuário
Este link é normal com <a href="suapagina.aspx>Link<a> se precisar passar algum valor você deve concatenar
Thank you for registering web site! Follows your credentials for logging-in:
UserName: <% UserName %>
Password: <% Password %>
See you online!
Duvida 4 - E como seria você deve mudar a lógica acima enviando um link para ele confirmar o registro. Uma flag no banco seria interessante? Teria algum exemplo em video ou algo assim para me facilitar
Mudar a lógica é como eu expliquei na resposta 3, cria um método de envio de email e a Flag pode ser um campo char(1) se o campo for N significa que ele é novo usuário, acabou de se cadastrar, quando ele clicar no link e validar você faz um update para A isso que significa que agora ele é ativo, quando ele for fazer a autenticação se o campo não for igual a A você não deixa ele acessar.
Espero ter ajudado com as idéias acima.
No caso achei este metodo aqui e o coloquei no evento page load do VS2008 mas ele não recebe o email no HOTMAIL porque, mesmo eu tendo-o o testado online em meu provedor de serviços (LOCAWEB), veja como criei baseado em um exemplo o codigo
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net.Mail;
using System.Net.Mime;
using System.Net;
namespace EnviaEmail
{
public partial class EnviaEmailAutenticado : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
SmtpClient cliente = new SmtpClient("meuemail@meudominio.com",587);
cliente.EnableSsl = true;
MailAddress from = new MailAddress("meudominio@meudominio.com","NomedeQuemEnvia");
MailAddress to = new MailAddress("meuemail@hotmail.com", "Luiz");
MailMessage mail = new MailMessage(from, to);
mail.Body = "Mensagem no corpo do email.";
mail.Subject = "Assunto do email";
NetworkCredential credenciais = new NetworkCredential("meuemail@meudominio.com", "minhasenha", "");
cliente.Credentials = credenciais;
try
{
cliente.Send(mail);
}
catch
{
}
finally
{
mail.Dispose();
}
}
}
}
Fiz esse teste mas até agora não o recebi na minha conta do hotmail pq isso acontece? O que falta corrigir ? Fico no aguardo e desde já agradeço
Não caiu no SPAM? No da LocaWeb funcionou?
Não não funcionou nem utilizando para destinatário como hotmail, nem funcionou utilizando para um outro email valido que tenho na propria hospedagem
Ai fuçando a LOCAWEB achei esse outro código deles neste link
http://wiki.locaweb.com.br/pt-br/Envio_de_e-mails_via_.NET_utilizando_o_System.Net.Mail#Observa.C3.A7.C3.B5es
Exemplo em C# <%@ Page Language="C#" %>
<script runat="server">
public void Page_Load(Object Sender, EventArgs e)
{
//Cria objeto com dados do e-mail.
System.Net.Mail.MailMessage objEmail = new System.Net.Mail.MailMessage();
//Define o remetente do e-mail.
objEmail.From = new System.Net.Mail.MailAddress("Nome <email@seudominio.com.br>");
//Define os destinatários do e-mail.
objEmail.To.Add("Nome <email@dominio.com.br>");
objEmail.To.Add("Nome <email@dominio.com.br>");
//Enviar cópia para.
objEmail.To.Add("Nome <email@dominio.com.br>");
//Enviar cópia oculta para.
objEmail.Bcc.Add("Nome <email@dominio.com.br>");
//Define a prioridade do e-mail.
objEmail.Priority = System.Net.Mail.MailPriority.Normal;
//Define o formato do e-mail HTML (caso não queira HTML alocar valor false)
objEmail.IsBodyHtml = true;
//Define título do e-mail.
objEmail.Subject = "título do e-mail";
//Define o corpo do e-mail.
objEmail.Body = "Escreva aqui o seu <b>texto</b>";
//Para evitar problemas de caracteres "estranhos", configuramos o charset para "ISO-8859-1"
objEmail.SubjectEncoding = System.Text.Encoding.GetEncoding("ISO-8859-1");
objEmail.BodyEncoding = System.Text.Encoding.GetEncoding("ISO-8859-1");
//Cria objeto com os dados do SMTP
System.Net.Mail.SmtpClient objSmtp = new System.Net.Mail.SmtpClient();
//Alocamos o endereço do host para enviar os e-mails, localhost(recomendado) ou smtp2.locaweb.com.br
objSmtp.Host = "localhost";
//Enviamos o e-mail através do método .send()
try
{
objSmtp.Send(objEmail);
Response.Write("E-mail enviado com sucesso !");
}
catch(Exception ex)
{
Response.Write("Ocorreram problemas no envio do e-mail. Error = " + ex.Message);
}
//excluímos o objeto de e-mail da memória
objEmail.Dispose();
}
</script>
...ainda não testei pois estou esperando conversar com eles, mas já pergunto á vc se este seria o correto?
e fuçando em outro forum link
http://www.forumweb.com.br/foruns/index.php?showtopic=70690
Achei essa dica só não sei se seria a correta tb para o meu objetivo
O problema ocorre só com o Hotmail?
O Hotmail tem muito problema de recepção de mensagens, muitas vezes dão até problema e enviam para "Lixo eletrônico" pergunte ao admin da LocaWeb se seu site está configurado com a configuração de MX ( "v=spf1 a mx ptr ~all" ) o hotmail faz leitura de spf.
Tente com outro e-mail, caso dê certo o problema é o Hotmail.
Enfim como eu faria para que emails de destinatários que irão se cadastrar pelo processo de membership no meu site que esta num dominio adicional da locaweb e receberão a msg para validação de cadastro do mesmo usuário que se inscreveu no email dele caso o mesmo seja hotmail, gmail ou yahoo mail...etc
Vamos fazer o seguinte monta um formulário bem simples para mandar email, vamos fazer por partes.
Veja um exemplo abaixo, um exemplo que montei em um site.
Só uma dúvida você nunca enviou email pelo utilizanda a classe MailMessage?
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Untitled Page</title>
<link href="spa.css" rel="stylesheet" type="text/css" />
</head>
<body>
<form id="form1" runat="server">
<table width="49%" border="0" align="center">
<tr>
<td id="info" valign="top">
<span class="style3">
<table style="width: 100%">
<tr>
<td class="style6">
Nome:</td>
<td>
<asp:TextBox ID="nome" runat="server" CssClass="form1" MaxLength="60" Width="185px"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="nome"
ErrorMessage="Informe seu nome"></asp:RequiredFieldValidator></td>
</tr>
<tr>
<td class="style6">
Telefone:</td>
<td>
<asp:TextBox ID="telefone" runat="server" CssClass="form1" MaxLength="9" Width="185px"></asp:TextBox></td>
</tr>
<tr>
<td class="style6">
E-mail: <br />
</td>
<td>
<asp:TextBox ID="email" runat="server" CssClass="form1" MaxLength="60" Width="185px"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="email" ErrorMessage="Digite seu email" SetFocusOnError="True" Display="Dynamic"></asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="email"
ErrorMessage="E-mail inválido" SetFocusOnError="True" Display="Dynamic" ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"></asp:RegularExpressionValidator></td>
</tr>
<tr>
<td class="style6">
Mensagem:
</td>
<td>
<asp:TextBox ID="txtMensagem" runat="server" CssClass="form1" Height="50px" TextMode="MultiLine"
Width="253px"></asp:TextBox></td>
</tr>
<tr>
<td>
</td>
<td>
<asp:Button ID="btnEnviar" runat="server" CssClass="form1" OnClick="btnEnviar_Click"
Text="Enviar" /></td>
</tr>
<tr>
<td>
</td>
<td>
<asp:Label ID="lblMsg" runat="server"></asp:Label></td>
</tr>
</table>
</span>
</td>
</tr>
</table>
</form>
</body>
</html>
=================================================
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
nome.Focus();
}
protected void btnEnviar_Click(object sender, EventArgs e)
{
if(Page.IsValid)
{
try
{
txtMensagem.Text = txtMensagem.Text.Replace("\n", "<BR>");
txtMensagem.Text = txtMensagem.Text.Replace("'", "");
string TextoCompleto = txtMensagem.Text;
// create the message
MailMessage mail = new MailMessage();
// set the sender's address and display name
mail.From = new MailAddress(email.Text,nome.Text);
// add a first recipient by specifying only her address
mail.To.Add("mcontabil@mcontabil.com.br");
StringBuilder mensagem = new StringBuilder();
mensagem.Append("Formulário de contato - www.mcontabil.com.br <br>");
mensagem.Append("<br>");
mensagem.Append("==============================================================<br>");
mensagem.Append("<br>");
mensagem.Append("<b>Nome</b>: " + nome.Text + "<br>");
mensagem.Append("<b>E-mail</b>: " + email.Text + "<br>");
mensagem.Append("<b>Telefone</b>: " + telefone.Text + "<br>");
mensagem.Append("<b>Mensagem</b>:<br>");
mensagem.Append(TextoCompleto + "<br>");
mensagem.Append("==============================================================<br>");
mensagem.Append("<br>");
mail.Subject = "Formulário de contato - www.mcontabil.com.br";
mail.Body = mensagem.ToString();
mail.IsBodyHtml = true;
// set the mail’s priority to high
mail.Priority = MailPriority.Normal;
SmtpClient smtpClient = new SmtpClient();
smtpClient.Send(mail);
lblMsg.Text = "Mensagem enviada com sucesso";
btnEnviar.Enabled = false;
ApagarTextBox(this);
}
catch (Exception ex)
{
lblMsg.Text = ex.Message;
}
}
}
private void ApagarTextBox(Control pai)
{
foreach (Control ctl in pai.Controls)
if (ctl is TextBox)
((TextBox)ctl).Text = string.Empty;
else if (ctl.Controls.Count > 0)
ApagarTextBox(ctl);
}
}
Vou testar o codigo que vc me enviou depois dou um retorno, não nunca usei a classe mail.message no caso do script da locaweb com o codigo que eu vi no link deles funcionou, só funciona com smtp = localhost ou smtp2 como esta no link deles
Mas nunca usei a classe mail.message não e baseado no codigo que vc me enviou aonde coloco ou insiro o meu smtp e porta se precisar
Fico no aguardo e desde já agradeço
Eu costumo colocar no Web.Config, mas você pode fazer via código.
Exemplo no Web.Config
Abaixo do system.web
</system.web>
<system.net>
<mailSettings>
<smtp from="xxxxxx@mcontabil.com.br">
<network host="smtp.xxxx.com.br" password="senha" userName="xxxx@mcontabil.com.br"/>
</smtp>
</mailSettings>
</system.net>
Se você utiliza o Outlook basta copiar as configurações.
Olá Fabio Galante boas
Baseado no método que ativa o usuario member ship depois da validação via email que vc me passou como abaixo, apenas tiver que fazer uma pequena mudança IsAproved = true no lugar de Unlocked
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
namespace PainelPSBR
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//Verifica se a QueryString nula ou no
if (Request.QueryString["usuario"] != null)
{
//Atribui o usuario recuperado pela QueryString
// variavel string usuario
string usuario = Request.QueryString["usuario"].ToString();
//Pesquisa o nome do usuario recuperado e atribuido
// variavel string usuario na classe Membership metodo GetUser
//e o atribui variavel criada userInfo da classe MembershipUser
MembershipUser userInfo = Membership.GetUser(usuario);
//Verifica se userInfo diferente de nulo
//ou seja se for nulo porque no o encontrou
//No cadastro do MemberShip
//Se for diferente de nulo valida e desbloqueia
if (userInfo != null)
{
//Desbloquea o Usuario atraves da Propriedade UnlockUser;
userInfo.IsApproved = true;
Response.Write("Usurio " + userInfo + " Validado com Sucesso!!!");
}
else
{
Response.Write("Usurio no encontrado!!!");
}
}
}
}
}
E o que aconteceu em duas tentativas que fiz, colocando ao executar a pagina na QueryString do cabeçalho Http como se segue
http://localhost:1390/Default.aspx?usuario=Admin (Veio como resposta Usuario Admin Validado com Sucesso!!!) Lembrando que ele já tinha sido validado pela ferramenta administrativa do asp.net neste caso não mudou nada e o isApproved continuou true
Bem no segundo teste
http://localhost:1390/Default.aspx?usuario=LuizAntonio (Veio como resposta Usuário LuizAntonio Validado com Sucesso!!! )Porem quando eu fiz Refresh na base de dados e na table aspnet_MemberShip os dados dos campos , IsApproved e IsLockeOut continuam os mesmos ou seja
Usuario:Admin - IsApproved = True e IsLockedOut = False
Usuario:LuizAntonio - IsApproved = False e IsLockedOut = False
Abaixo o meu web.config da app
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
<sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
<section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
<section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
<section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
</sectionGroup>
</sectionGroup>
</sectionGroup>
</configSections>
<appSettings/>
<connectionStrings>
<remove name="LocalSqlServer"/>
<add name="MembershipConnection" connectionString="Data Source=.\sqlexpress;Initial Catalog=BancoAspNetLinhadeCodigo;Integrated Security=True" providerName="System.Data.SqlClient"/>
<add connectionString="server=mysql1;database=mysqldb1;user id=userid1;pwd=mypwd1" name="SimpleProviderConnectionString" providerName="MySql.Data.MySqlClient"/>
<add connectionString="server=mysql2;database=mysqldb2;user id=userid2;pwd=mypwd2" name="SiteString" providerName="MySql.Data.MySqlClient"/>
</connectionStrings>
<system.web>
<!--
Set compilation debug="true" to insert debugging
symbols into the compiled page. Because this
affects performance, set this value to true only
during development.
-->
<globalization requestEncoding="ISO-8859-1" responseEncoding="ISO-8859-1" culture="pt-BR"/>
<compilation debug="true">
<assemblies>
<add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</assemblies>
</compilation>
<!--
The <authentication> section enables configuration
of the security authentication mode used by
ASP.NET to identify an incoming user.
-->
<authentication mode="Forms"/>
<!--<profile configSource="ProfileSection.config"/>-->
<customErrors mode="RemoteOnly" defaultRedirect="aviso.aspx"/>
<sessionState timeout="1"/>
<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
<providers>
<clear/>
<add name="SqlProvider" type="System.Web.Security.SqlMemberShipProvider" connectionStringName="MembershipConnection"/>
</providers>
</membership>
<!--
The <customErrors> section enables configuration
of what to do if/when an unhandled error occurs
during the execution of a request. Specifically,
it enables developers to configure html error pages
to be displayed in place of a error stack trace.
<customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
-->
<pages>
<controls>
<add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</controls>
</pages>
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
</httpHandlers>
<httpModules>
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</httpModules>
</system.web>
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<providerOption name="CompilerVersion" value="v3.5"/>
<providerOption name="WarnAsError" value="false"/>
</compiler>
</compilers>
</system.codedom>
<!--
The system.webServer section is required for running ASP.NET AJAX under Internet
Information Services 7.0. It is not necessary for previous version of IIS.
-->
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules>
<remove name="ScriptModule"/>
<add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</modules>
<handlers>
<remove name="WebServiceHandlerFactory-Integrated"/>
<remove name="ScriptHandlerFactory"/>
<remove name="ScriptHandlerFactoryAppServices"/>
<remove name="ScriptResource"/>
<add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</handlers>
</system.webServer>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Fico no aguardo e desde já agradeço para saber o que está ocorrendo na validação que não está validando por enquanto
Olá consegui validar o usuário o que estava faltando no codigo éra a linha do
Membership.UpdateUser(userInfo);
Como mostra abaixo o codigo completo
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
using System.Web.UI.HtmlControls;
using WebProdutos.Encrypto;
namespace PainelPSBR
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//Verifica se a QueryString nula ou no
if (Request["usuario"] != null)
{
//Atribui o usuario recuperado pela QueryString
// variavel string usuario
string usuario = Request["usuario"].ToString();
//Mtodo de Cryptografia Hash
//Pesquisa o nome do usuario recuperado e atribuido
// variavel string usuario na classe Membership metodo GetUser
//e o atribui variavel criada userInfo da classe MembershipUser
MembershipUser userInfo = Membership.GetUser(usuario);
//Verifica se userInfo diferente de nulo
//ou seja se for nulo porque no o encontrou
//No cadastro do MemberShip
//Se for diferente de nulo valida e desbloqueia
if (userInfo != null)
{
//Desbloquea o Usuario atraves da Propriedade UnlockUser;
userInfo.IsApproved = true;
//Atualiza os Dados na Base MemberShip
//para Este Usurio
Membership.UpdateUser(userInfo);
Response.Write("Usurio " + userInfo + " Validado com Sucesso!!!");
}
else
{
Response.Write("Usurio no encontrado!!!");
}
}
}
}
}
Só que eu gostaria de saber se haveria alguma forma de por exemplo deixar o MemberShip userInfo como HASH na linha de comparação tipo assim
MembershipUser Hash(userInfo) = Membership.GetUser(usuario); //Já que pretendo que o (usuario) solicitado via querystring seja em Hash
Fico no aguardo e desde já agradeço
Para ficar Hash você tem que modificar o Web.Config, pesquise sobre este assunto.
<membership defaultProvider="SqlMembershipProvider"
userIsOnlineTimeWindow="15">
<providers>
<add
name="SqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="SqlConnString"
applicationName="WebSite1"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="false"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
passwordAttemptWindow="10"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0"/>
</providers>
</membership>
O melhor tutorial sobre Membership você encontra neste link.
http://www.asp.net/learn/security/tutorial-04-cs.aspx
Olá Fabio - boas
A senha por default já está em HASH, o que eu preciso seria algo assim, baseado no metodo de validação de usuario que vc me disse
eu crio na hora de ele cadastrar um parametro string paralelo em HASH do nome do usuario tipo
http://localhost:1390/VerificarUsuarioEmailReader.aspx?ID=tc6pCV1TfHoUfIg+4ujvrzTGdLI7SiZQdujyO9H+hnkxQVt/aHvrtkUZthy/zpC3fUkHn4COTql66MeJexrHJA==
para comparar com o metodo
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Security;
using System.Web.UI.HtmlControls;
using Encrypto;
namespace PainelPSBR
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//Verifica se a QueryString nula ou no
if (Request["ID"] != null)
{
//Atribui o usuario recuperado pela QueryString
// variavel string usuario
string usuario = Request["ID"].ToString();
//Pesquisa o nome do usuario recuperado e atribuido
// variavel string usuario na classe Membership metodo GetUser
//e o atribui variavel criada userInfo da classe MembershipUser
MembershipUser HASH(userInfo) = Membership.GetUser(usuario);
//Verifica se userInfo diferente de nulo
//ou seja se for nulo porque no o encontrou
//No cadastro do MemberShip
//Se for diferente de nulo valida e desbloqueia
if (userInfo != null)
{
//Desbloquea o Usuario atraves da Propriedade UnlockUser;
userInfo.IsApproved = true;
//Atualiza os Dados na Base MemberShip
//para Este Usurio
Membership.UpdateUser(userInfo);
Response.Write("Usurio " + userInfo + " Validado com Sucesso!!!");
}
else
{
Response.Write("Usurio no encontrado!!!");
}
}
}
}
}
Seria isso que preciso tem como se fazer isso? Ou seja o usuario no banco ele continua com nome normal - meunomeusuario mas é comparado com a querystring ID ácima que vem HASHEADA pelo nomedousuario
ID = tc6pCV1TfHoUfIg+4ujvrzTGdLI7SiZQdujyO9H+hnkxQVt/aHvrtkUZthy/zpC3fUkHn4COTql66MeJexrHJA==
que se equivale ao nome do usuario no BANCO = LuizAntonio
Fico no aguardo e desde já agradeço