2012-08-09 3 views
-2

je construis une application Web à l'aide du modèle maître par défaut dans VS2010 - très nouveau pour le faire. J'utilise également la page Login.aspx, mais au lieu d'utiliser la validation utilisateur intégrée, mes informations utilisateur se trouvent dans une table de base de données. Donc, suivant les instructions que j'ai trouvé, je fais quelque chose Wery semblable à ceci:Comment valider le mot de passe lorsque TextMode = « Mot de passe »

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) 
{ 
    Boolean bauthenticated = false; 
    bauthenticated = isValidUser(Login1.UserName, Login1.Password); 
    if (bauthenticated) 
    { 
     e.Authenticated = true; 
    } 
    else 
    { 
     e.Authenticated = false; 
    } 
} 

Le problème est que je mets la méthode isValidUser dans un .dll il pourrait être utilisé ailleurs, et il ne reçoit pas le mot de passe parce que le comportement par défaut est de l'effacer. J'ai même essayé de définir une variable de chaîne à Login1.Password, et passer la variable sans succès. Je comprends pourquoi cela se produit, mais je ne trouve aucune information sur la façon de le faire correctement. Dois-je mettre le nom d'utilisateur et le mot de passe dans un objet et le transmettre à mon constructeur de classe? Je ne veux vraiment pas me connecter à ma base de données à partir de chaque page Login.aspx que je crée pour éviter d'envoyer le mot de passe sur http.

+0

Vérifiez votre méthode isValidUser –

+0

Quel type d'objet est 'Login1'? –

+1

Corrigez-moi si je me trompe ici, mais n'est pas la réponse à simplement ** ne pas effacer le mot de passe **? Pouvez-vous poster le code pour 'isValidUser'? FYI - votre code pourrait être raccourci à 1 ligne: 'e.Authenticated = isValidUser (Login1.UserName, Login1.Password)'. – James

Répondre

0

Essayez d'utiliser le code suivant.

protected void LoginButton_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      dtUserDetails = new DataTable(); 
      if (UserRepositoryBL.ValidateUser(LoginUser.UserName.Trim(), LoginUser.Password.Trim(), out dtUserDetails)) 
      { 

       AuthUser au = new AuthUser(); 
       if (dtUserDetails.Rows.Count > 0) 
       { 
        DataRow DR = dtUserDetails.Rows[0]; 
        au.UserID = Convert.ToInt32(DR["UserID"].ToString()); 
        au.UserNo = DR["UserNo"].ToString(); 
        au.UserName = DR["UserName"].ToString(); 
        au.Password = DR["Password"].ToString(); 
       } 
       string userData = au.ToString(); 
       FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(

      1,        // Version number 

      LoginUser.UserName.Trim(),  // Username 

      DateTime.Now,     // Issue date 

      DateTime.Now.AddMinutes(60), // Expiration date 

      false,       // Persistent? 

      userData     // User data 

     ); 



       string eticket = FormsAuthentication.Encrypt(ticket); 

       HttpCookie cookie = new HttpCookie 

        (FormsAuthentication.FormsCookieName, eticket); 

       Response.Cookies.Add(cookie); 


       BasePage.ActivityLog("User Login", LoginUser.UserName.Trim(), true, Request.RawUrl); 
       string url = FormsAuthentication.GetRedirectUrl(LoginUser.UserName, false); 

       Response.Redirect(url); 

       // FormsAuthentication.RedirectFromLoginPage(LoginUser.UserName, false); 

      } 
      else 
      { 
       LoginUser.FailureText = "Your login attempt was not successful. Please try again."; 
      } 

     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
    } 

dtUserDetails est un paramètre sur lequel contient les détails de l'utilisateur comme mot de passe, nom d'utilisateur, etc .. sur le rendement login.datatable succès vide si login.with invalide dans la chaîne userData toutes ces informations seront available.then Vous pouvez récupérer ces informations à partir de n'importe quelle page à l'aide du ticket authentifié par l'utilisateur

+0

Merci, mais comment vais-je recevoir un succès connectez-vous si j'identifie le nom d'utilisateur et le mot de passe dans ma propre base de données? Je n'utilise pas le modèle d'adhésion - voir mon dernier commentaire ci-dessus. – Brian

+0

ce code utilise pas non plus membership.UserRepositoryBL.ValidateUser (LoginUser.UserName.Trim(), LoginUser.Password.Trim(), sur dtUserDetails) appelle à des méthodes you'r propre base de données – chamara

+0

désolé pour ma confusion, mais êtes-vous suggérant que j'enregistrer le nom d'utilisateur et le mot de passe dans un DataTable et le passer à mon .dll? – Brian

Questions connexes