Нужна помощь в авторизации с использованием asp.net - PullRequest
1 голос
/ 28 января 2009

Простой способ аутентификации на странице входа. Как я могу сделать эту аутентификацию в 3-х уровневой архитектуре? пожалуйста, кто-нибудь пришлите мне код, что должно быть в слоях DAL, BAL и GUI? Вот мой простой код:

Web.config:

<authentication mode="form">
    <form loginurl="Login.aspx">
         <credential password Format="clear">
          <user name="abcd" password="1234">
        </credential>
      </authentication>
     </form>
   <authorization>
     <deny users="?">
   </authorization>

login.aspx.cs:

   sqlconnection con=new sqlconnection("server=localhost;database=dbname;uid=;pwd=;Trusted_Connection=true");
sqldataAdapter da=new sqldataAdapter("select * from Login where UserName='"+TextBox1.Text+"' and Password='"+TextBox2.Text+"'",con);
Dataset ds=new Dataset();
da.Fill(ds);

if(ds.Tables[0].rows.Count>0)
{
   if(FormAuthentication.Authenticate("abcd","1234")
   {
        FormAuthentication.RedirectFromLoginPage(TextBox1.Text,false);
        Response.write("Logged in");
    }
    else
    {
        Response.write("Unautherised User");
    }

   Response.Redirect("welcome.aspx");
}
else
{
  Response.write("Sorry Invalid UserName or Password");
}

Ответы [ 2 ]

1 голос
/ 28 января 2009

В общем, вы должны иметь как минимум следующие классы:

  • В DAL у вас должен быть класс, который передает соединения с базой данных
  • В BAl у вас должен быть класс, представляющий каждый пользовательский экземпляр. Этот класс должен иметь метод с именем login (), в котором выполняется вся аутентификация и авторизация.
  • Веб-форма, представляющая пользовательский интерфейс.

Кроме того, для предотвращения внедрения SQL никогда не объединяйте строки запроса. Вместо этого используйте параметры.

Вот несколько примеров классов:

namespace DAL
{
    public class ConnectionManager
    {
        public static SqlConnection GetConnection() {
            SqlConnection cn = new SqlConnection("server=localhost;database=dbname;uid=;pwd=;Trusted_Connection=true");
            cn.Open();
            return cn;
        }
    }
}

namespace BAL
{
    public class User
    {
        public string UserName { get; set; }
        public string Password { private get; set; }

        public bool Login() {
            return Login(this.UserName, this.Password);
        }

        public bool Login(string user, string password) {
            bool success=false;
            using (SqlConnection cn = ConnectionManager.GetConnection())
            {
                string sql = "select count(*) from Login where UserName=@user and Password=@password";
                using (SqlCommand command = new SqlCommand(sql, cn))
                {
                    command.Parameters["@user"].Value = user;
                    command.Parameters["@password"].Value = password;
                    success = (int)command.ExecuteScalar() > 0;
                }
                cn.Close();
            }
            return success;
        }
    }
}
0 голосов
/ 28 января 2009

Немного в недоумении, почему вы хотите изобрести велосипед? ASP.NET членство провайдера делает все это для вас, и если вам нужно сильно изменить его поведение, его открытый исходный код, легко читается, понимается и изменяется Его можно легко интегрировать с вашей собственной n-уровневой архитектурой - мы делаем это постоянно.

...