Authentificaction en c#

nn99 Messages postés 1 Date d'inscription dimanche 30 décembre 2007 Statut Membre Dernière intervention 15 mai 2011 - 15 mai 2011 à 17:32
PapyNormand Messages postés 27 Date d'inscription samedi 7 août 2010 Statut Membre Dernière intervention 16 janvier 2014 - 16 mai 2011 à 20:39
bonjour,
je suis débutante en c#,j'ai écris un script afin de pouvoir me connecter avec un login et mot de passe à une base de donnée sql:

using System;
using System.Data;
using System.Data.SqlClient;
public partial class Authentification : System.Web.UI.Page
{
public bool AuthenticateUser(string username, string password)
{
bool authenticated;
SqlDataReader reader;
SqlConnection conn = new SqlConnection(Globals.ConnectionString());
SqlCommand cmd = new SqlCommand("AuthenticateUser",conn);

cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "aspnet_Membership_GetPassword";
cmd.Parameters.Add("@UserName",txtuser);
cmd.Parameters.Add("@PasswordAnswer",txtmdp);
conn.Open();
reader = cmd.ExecuteReader();

if(reader.Read())
{
authenticated = true;
}
else
{
authenticated = false;
}

reader.Close();
conn.Close();
conn.Dispose();


return authenticated;
}

protected void Page_Load(object sender, EventArgs e)
{
// nombre.text=Console.Write("Application["countConnextion"]");
}
protected void Button1_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
Authentification users = new Authentification();
bool auth;
auth = users.AuthenticateUser(txtuser.Text, txtmdp.Text);

if (auth)
{
// authenticated was successful, lets create the authentication cookie and redirect them to another place (either where they were trying to go to or default.aspx)
FormsAuthentication.RedirectFromLoginPage(txtuser.Text, false);
}
else
{
Console.Write( "Account information was incorrect. Please try again!");

}
}
else
{
Console.Write( "Missing some fields. Please try again.");
}
}
}


j'ai une erreur ds le using System.Data.SqlClient;

tt les objets sql sont soulignés en rouge
une autre ligne soulignée:
FormsAuthentication.RedirectFromLoginPage(txtuser.Text, false);


veuillez m'aider à trouver une solution et merci d'avance

1 réponse

PapyNormand Messages postés 27 Date d'inscription samedi 7 août 2010 Statut Membre Dernière intervention 16 janvier 2014 1
16 mai 2011 à 20:39
Bonjour,

Vous avez le code suivant
SqlCommand cmd = new SqlCommand("AuthenticateUser",conn);
cette forme du constructeur pour une SqlCommand me semble renseignée de façon incorrecte . En effet, le 2ème paramètre est correct ( c'est un objet SqlConnection ), par contre le 1er paramètre doit être une instruction T-SQL , ce que n'est pas AuthentificateUser qui , me semble-t-il est le nom de la méthode.

Dans un 1er temps, je vous conseillerais un code de ce type :
SqlConnection conn = new SqlConnection(Globals.ConnectionString());
SqlCommand cmd = new SqlCommand(conn);

cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "aspnet_Membership_GetPassword";
J'espère que aspnet_Membership_GetPassword est bien le nom d'une procédure stockée, sinon vous aurez une erreur d'execution.
Pour l'ajout des paramètres à un objet SqlCommand, je suis farouchement contre cette forme abrégée où le 1er paramètre est le nom du paramètre ( correct à 1ère vue ) et le 2ème paramètre la valeur du paramètre, surtout pour une débutante. Depuis la sortie de VS 2003, je n'ai pas changé de méthode de programmation car je suis sûr ( à 99 % ) de ne rien oublier :
SqlParameter m_param = new SqlParameter;
m_param.SqlDbType = SqlDbType.NVarchar;
( ou le type T-SQL utilisé pour le 1er paramètre de la procédure stockée dont le nom a été passé dans cmd.CommandText , c'est la façon la plus sure d'éliminer de possibles problèmes )
m_param.Size = 256;
( où la valeur qui est entre les parenthèses à la fin du nvarchar de la définition du paramètre de la procédure stockée )
m_param.Direction = Parameter.Input ( dans vôtre cas )
mais peut être Output,InputOutput et ReturnValue
m_param.IsNullable = false;
( sûrement dans vôtre cas car je ne vois pas d'intéret à avoir un nom d'utilisateur vide ou à blanc )
m_param.SqlValue = username;
cmd.Parameters.Add(m_param);
faire la même chose avec le 2ème paramètre ( mot de passe )
Pour la suite, je ne peux rien dire car je ne sais pas ce que fait cette procédure stockée , notamment, est-ce qu'elle ne renverrait pas une variable de type bit ( correspondant à Boolean en VC#, dans ce cas, il faudrait l'inclure dans les paramètres ) ?
Autre chose, l'appel à Dispose() pour conn après le Close() ne sert à rien et peut être même source de problème : à supprimer

Vous devriez aussi utiliser le style try/catch/finalize en traitant au moins comme exception Exception ( classe pour les exceptions "génériquesé ) et SqlException ( classe pour les exceptions liées au namespace SqlClient , les propriétés/méthodes utiles : GetBaseException(), Class, ErrorCode, LineNumber, Message, Number, Procedure, Server, Source, StackTrace et éventuellement TargetSite.Name )

Bon code et bon test
0
Rejoignez-nous