身份验证用户错误(管理员或简单用户)

时间:2018-07-22 15:29:57

标签: c# asp.net

我有一个身份验证界面,用户必须在其中输入登录名和密码才能进行连接。 将显示的界面取决于所连接的登录配置文件(用户或管理员)

用户表包含(用户,密码,个人资料,邮件)

这是我的代码

在authentification.cs中:

public Boolean profile_user (string log)
{
   string value = "";
   SqlCommand cmd = conn.CreateCommand ();
   cmd.CommandText = "select profile from user where user = '" + log + "';";
   SqlDataReader s = cmd.ExecuteReader ();
   if (s.Read ())
   {value = s ["profile"]. ToString (); }
   if (value == "admin")
   {return true; }
   else {return false; }
}

在authentification.aspx.cs中

login = new profile_user (name.Text)
if (login == true)
{Response.Redirect ("admin.aspx"); }
else
{Response.Redirect ("user_c.aspx"); }

错误始终存在,它执行其他部分,即无论输入什么登录名,始终出现user_c窗口

完整的类(authentification.cs)是:

using System.Data.SqlClient;
using System;
using System.Data;
using System.Windows.Forms;
namespace my_pfe
{  
SqlConnection conn = new database().connect_utilisateur();
 // database is another class 
public void class new_user(string nom,string pass, string mail , string profile) 
 {insert into instruction}
public Boolean search_user(string login)
 { select requete }
public Boolean profile_user (string log)
{
string value = "";
SqlCommand cmd = conn.CreateCommand ();
cmd.CommandText = "select profile from user where user = '" + log + "';";
SqlDataReader s = cmd.ExecuteReader ();
if (s.Read ())
{value = s ["profile"]. ToString (); }
if (value == "admin")
{return true; }
else {return false; }
}

我在值= s [“ profile”]。ToString();中设置了一个断点。 ,则value的值为“ admin”,但admin的空间很大(value和valeur的名称相同)

enter image description here

2 个答案:

答案 0 :(得分:1)

编辑:您必须检查数据库中的值以确保它们不包含空格,如果不包含空格,则可以使用String.Trim()方法删除字符串的所有空格。

尝试:

在authentification.cs中:

using System.Data.SqlClient;
using System;
using System.Data;
using System.Windows.Forms;

namespace MyPfe
{
   public class NewUser
   {
       private SqlConnection conn = null;

       public NewUser()
       {
           this.conn = new database().connect_utilisateur();
       }

       public void AddUser(string nom,string pass, string mail , string profile)
       {
           //Insert into
       }

       public bool SearchUser(string login)
       {
           //Select requete
       }

       public bool ProfileUser(string log)
       {
           string value = string.Empty;
           var cmd = this.conn.CreateCommand();
           cmd.CommandText = string.Format("select profile from user where user = '{0}'", log);
           var s = cmd.ExecuteReader();
           if (s.Read()) value = s["profile"].ToString().Trim();
           return value == "admin";
       }
   }
}

在authentification.aspx.cs中:

var NewUser = new MyPfe.NewUser();
if(NewUser.ProfileUser(name.Text)) Response.Redirect ("admin.aspx");
else Response.Redirect ("user_c.aspx");

答案 1 :(得分:0)

我认为您不应该保留';'在查询中,当您从asp.net执行数据库调用时。因此,请尝试将其删除并检查是否正常。另外,为什么不放置断点并检查

会产生什么值
s ["profile"]. ToString ()