Fórum E-mail com link de Validação/Autenticação para usuário Cadastrado via MemberShipProvider #3377

06/03/2009

0

Olá Consultores DevMedia, gostaria de saber como se criar um envio de e-mail em ASP.NET AJAX ENABLED WEB APPLICATION PROJECT, WEB APPLICATION PROJECT ou ASP.NET WEB SITE em CSharp Asp.Net, personalizavel e com link de validação e mais outro link para uma página do tipo painel admin, que só este usuário cadastrado e validado para o usuário que ao se cadastrar em meu site via member ship provider, mas que sua autenticação para efetuar login e senha com mais segurança só seja feita após o mesmo ter clicado o link de validação em seu email, enfim como eu faria isso  passo a passo como seria esse processo e como eu faria essa validação do usuario do member ship via link de email


Fico no aguardo caso alguem possa me ajudar e desde já agradeço
Luiz Franco

Luiz Franco

Responder

Posts

09/03/2009

Fabio Mans

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
Responder

Gostei + 0

09/03/2009

Luiz Franco

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
Responder

Gostei + 0

11/03/2009

Fabio Mans

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.
     
Responder

Gostei + 0

11/03/2009

Luiz Franco

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
Responder

Gostei + 0

17/03/2009

Fabio Mans

   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.  
Responder

Gostei + 0

18/05/2009

Luiz Franco

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      
Responder

Gostei + 0

18/05/2009

Fabio Mans

Não caiu no SPAM? No da LocaWeb funcionou?
Responder

Gostei + 0

18/05/2009

Luiz Franco

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
Responder

Gostei + 0

22/05/2009

Fabio Mans

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);
    }
}
Responder

Gostei + 0

23/05/2009

Luiz Franco

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
Responder

Gostei + 0

25/05/2009

Fabio Mans

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.
Responder

Gostei + 0

26/05/2009

Luiz Franco

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
Responder

Gostei + 0

30/05/2009

Luiz Franco

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
Responder

Gostei + 0

02/06/2009

Fabio Mans

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
Responder

Gostei + 0

02/06/2009

Luiz Franco

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
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar