Authentification par formulaire et base sql server

Signaler
Messages postés
11
Date d'inscription
mercredi 8 juillet 2009
Statut
Membre
Dernière intervention
27 août 2010
-
amalouch1
Messages postés
11
Date d'inscription
mercredi 8 juillet 2009
Statut
Membre
Dernière intervention
27 août 2010
-
Bonjour tout le monde,
Je suis entrain de développer une application web avec asp.net. J'utilise web developper 2008 et sql server 2005.
Mon problème est :
j'ai fait un formulaire pour l'authentification par formulaire et j'identifie les utilisateurs en se servant d'une base de données Client.
La connexion à la base marche bien mais toujours s'affiche le msg : login ou pwd incorrect
voila mon code :
c'est la fonction qui effectue le test des valeurs saisies et retourne un booléan.
private bool Authentifier(string strUtilisateur, string strMotDePasse)
    {
        bool bOk = false;
        // Cryptage du mot de passe
        strMotDePasse = FormsAuthentication.HashPasswordForStoringInConfigFile(strMotDePasse, "MD5");
        // Création d'une connexion SGBD
        SqlConnection oConnexion = new SqlConnection(@"Data Source=SWEET-BF6C823KF\SQLEXPRESS;Initial Catalog=baseauthen;Integrated Security=True");
        // Définition de la requête à exécuter
        SqlCommand oCommand = new SqlCommand("SELECT * FROM Client WHERE nom='" + strUtilisateur + "'", oConnexion);
        try
        {
            // Ouverture de la connexion et exécution de la requête
            oConnexion.Open();
            SqlDataReader drUtilisateur = oCommand.ExecuteReader();
            // Parcours de la liste des utilisateurs
            while (drUtilisateur.Read())
            {
                if (drUtilisateur["motdepasse"].ToString() == strMotDePasse)
                {
                    bOk = true; 
                    break;
                }
            }
        }
        catch
        {
            bOk = false;
        }
        oConnexion.Close();
        return bOk;
    } 


et lors de click sur btn connexion voila mon code :
protected void ButtonCnx_Click(object sender, EventArgs e)
    {
        if (Authentifier(TextBox1.Text , TextBox2.Text ))
        {
            FormsAuthentication.RedirectFromLoginPage(TextBox1.Text , false);
        }
        else
        {
            lbMessage.Text = "Login ou pwd incorrect !";
        } 
    }


je sais pas pourquoi il ne marche pas.
j'ai besoin de votre aide merci d'avance.

10 réponses

Messages postés
2811
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
26
Drôle de façon de faire un formulaire d'authentification.

Ajoute simplement une chaine de connexionà ton web.config, un fournisseur de rôleset d'appartenances, puis insère un contrôle login au lieu de te casser la tête avec du code behind. Tu sera obligé d'en passer par la de toute façon.

@+

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Messages postés
11
Date d'inscription
mercredi 8 juillet 2009
Statut
Membre
Dernière intervention
27 août 2010
1
wéééééééééééééééééééééééééééééééy ça marche
merci beaucouuuuuuuuuuuuuuuuuup
Messages postés
11
Date d'inscription
mercredi 8 juillet 2009
Statut
Membre
Dernière intervention
27 août 2010
1
Merci pour votre réponse
Est ce que vous voulez dire utilisation de l'outil configuration asp.net?
en fait j'ai utilisé cet outil et le controle Login mais ni l'authentification ni l'autorisation marche c'est pour cela que jai recourt au code behind.
est ce que le problème peut être du que IIS n'est pas installé sur mon poste? Mon syst d'exploitation est windows xp service pack3.
Comment faire pour l'installer??
@+
Messages postés
2811
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
26
en fait j'ai utilisé cet outil et le controle Login mais ni l'authentification ni l'autorisation marche c'est pour cela que jai recourt au code behind.


C'est parce que tu as mal configuré l'application.

Il suffit en effet d'utiliser l'outil configuration ASP.Net, d'activer l'authentification par formulaire, de créer des rôles (Facultatif) et de créer au moins un utilisateur pour pouvoir te connecter. Place en suite un Login dans une page vierge et le contrôle login te logera automatiquement. Bien entendu, si tu n'as que ce contrôle sur la feuille alors oui tu ne peux vérifier si tu es connecter ou non. Il te faudra alors placer un LoginView et mettre le texte "Je suis connecté" dans le LoggedIn template. Tu verras apparaitre celui-ci si l'authentification fonctionne.

Lors ce que tu configure la ton application un fournisseur d'appartenance (MembershipProvider) et un fournisseur de rôles (RoleProvider) doivent être définis. Si ce n'est pas le cas les fournisseurs par défaut sont les fournisseurs 'AspNetSqlMembershipProvider' et 'AspNetSqlRoleProvider'.

Ces 'fournisseurs' ne sont autre que des Assembly qui se chargeront de gérer pour toi l'accès aux données et de travailler avec les contrôles de connexion ASP.Net. Il est donc fortement recommandé d'utiliser cette méthode pour éviter de se taper à la main 20% de code en plus. Qui plus est pour éviter aussi les failles de sécurités potentielles.

Les options de ces Assembly peuvent être définies via le Web.config (par exemple pour leur préciser quelle chaine de connexion utiliser, ou la taille des mots de passe ou leur format etc...)

Il est aussi possible, si tu le souhaite, créer de toute pièce des provider pour travailler avec un SGBD spécifique. L'exemple le plus marquant est MySqlProvider qui est un fournisseur de rôle et d'appartenance pour ASP.Net > MySql. Tu peux en trouver le code source sur internet.

Une dernière chose, le fournisseur par défaut te créera une base de données SQL Serveur dans le dossier APP_Data et une chaine de connexion dans le web.config. Il est donc essentiel de posséder une instance de SQL Server (même Express Ed.)
en cours d'exécution sur le PC de développement.

Ma description est un peu longue car je détaille, mais ce que je cite plus haut prend moins d'une minute à réaliser.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Messages postés
2811
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
26
est ce que le problème peut être du que IIS n'est pas installé sur mon poste? Mon syst d'exploitation est windows xp service pack3.
Comment faire pour l'installer??


Ah j'oubliais, pour IIS c'est pas essentiel, il ne peux s'installer que sur les versions pro de XP (Ajout suppresion de programme/Ajouter ou supprimer des composants Windows).

Si tu possède IIS, tu peux créer un site, l'ajouter à IIS et réouvrir celui-ci dans VS en mode serveur (IIS local).
Dans le cas contraire, créer un site en mode système de fichier et Cassini, un serveur de développement se chargera du reste.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Messages postés
11
Date d'inscription
mercredi 8 juillet 2009
Statut
Membre
Dernière intervention
27 août 2010
1
Merci beaucoup pour votre aide et patience.
J'ai fait comme tu m'as dit et l'authentification marche .
J'ai ajouté aussi des roles et des régles d'accés aux répertoires de mon application : rep admin et rep user (de même pour les roles admin et user).
le problème est que aprés authentification il aura redirection tjs à default.aspx est ce que càd que les régles d'accés ne s'éxécute pas ??
je veux par exemple rediriger l'utilisateur admin seulement aux pages du rep admin et je pense qu'aux travers les régles d'accés cela est réalisé.
Messages postés
2811
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
26
le problème est que aprés authentification il aura redirection tjs à default.aspx est ce que càd que les régles d'accés ne s'éxécute pas ??


Non, les règles d'accès servent à protéger les répertoires. Un role non autorisé n'aura pas l'accès à un répertoire. Si il n'y a pas de règle définie, l'accès est autoriser pour tout le monde, même les non logués.

Mais en aucun cas il ne fait la redirection. C'est à toi de le faire en code behind.

        Dim user As MembershipUser = Membership.GetUser
        If user Is Nothing Then
            Response.Redirect("~/Default.aspx", True)
        Else
            If Roles.IsUserInRole("Administrateur", user.UserName) Then
                Response.Redirect("/Admins/Default.aspx", True)
            Else
                Response.Redirect("/Users/Default.aspx", True)
            End If
        End If


Maintenant que tu as tes fournisseur, il est très simple de savoir si un utilisateur est connecté, de connaitre sont rôle etc... Pas besoin de DataSet et d'accès aux données. C'est les Instances de provider 'Roles' et 'Membership' qui le font pour toi.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Messages postés
11
Date d'inscription
mercredi 8 juillet 2009
Statut
Membre
Dernière intervention
27 août 2010
1
il m'affiche l'erreur suivante :
La référence d'objet n'est pas définie à une instance d'un objet.
if (Roles.IsUserInRole(user.UserName,"admin"))
{
Response.Redirect("~/admin/Admin.aspx");
}
quoi faire ?????
Messages postés
2811
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
26 novembre 2013
26
T'es C#, c'est vrai...

MembershipUser user = Membership.GetUser;
if (user == null) {
Response.Redirect("~/Default.aspx", true);
} else {
if (Roles.IsUserInRole("Administrateur", user.UserName)) {
Response.Redirect("/Admins/Default.aspx", true);
} else {
Response.Redirect("/Users/Default.aspx", true);
}
}


Tu ne teste pas si le membership est instancié, si c'est le cas c'est qu'un utilisateur est logué. Dans le cas contraire personne. Voila pourquoi tu as une NullReferencEexception.

Essaye de comprendre les codes qu'on te donne, sinon ca ne sert pas à grand chose, je ne serait pas la pour coder le reste de ton application !



Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
Messages postés
11
Date d'inscription
mercredi 8 juillet 2009
Statut
Membre
Dernière intervention
27 août 2010
1
Pardonnez-moi vous avez raison mais j'étais trop fatigué et le temps me presse aussi.
Je vous remercie de tout mon cœur pour votre aide, j'ai bien avancé dans mon travail.
j'ai honte de te déranger encore mais si vous me répondez je serais reconnaissante : après connexion il m'affiche url de page demandé mais pas son contenu et le contrôle login demeure affiché ???
http://localhost:4883/WebSite16/login.aspx?ReturnUrl=%2fWebSite16%2fadmin%2fAdmin.aspx