[asp.net] Moduł logowania do aplikacji webowej

[asp.net] Moduł logowania do aplikacji webowej
R7
  • Rejestracja:około 9 lat
  • Ostatnio:około 9 lat
  • Postów:2
0

Witajcie, próbuje stworzyć mechanizm logowania w asp.net web forms. Utworzyłem prostą bazę danych z jedną tabelą user (id, login, password, role).
Chce aby były 3 role: user, user2, admin. W zależności jaką użytkownik ma przypisaną rolę ma przekierować na konkretną stronę.

Dopiero się uczę asp.neta więc proszę o wyrozumiałość.

Login.aspx.cs

Kopiuj
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;

namespace WebApplication6
{
    public partial class Login : System.Web.UI.Page
    {
        static string DatabaseConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["dbtestConnectionStrings"].ConnectionString;
        SqlConnection _connection= new SqlConnection(DatabaseConnectionString);

        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void LoginButton_Click(object sender, EventArgs e)
        {
            try
            {
                var comm = new SqlCommand("select * from user where login=@login and password=@password", _connection);

                comm.Parameters.AddWithValue("@login", LoginUser.UserName);
                comm.Parameters.AddWithValue("@password", LoginUser.Password);

                _connection.Open();

                var rd = comm.ExecuteReader();

                if (rd.HasRows)
                {
                    while (rd.Read())
                    {
                        Session["UserName"] = rd["login"].ToString();
                        string role = rd["role"].ToString();
                        if (role == "user") Response.Redirect("User/User.aspx");
                        else if (role == "user2") Response.Redirect("User2/User.aspx");
                        else Response.Redirect("Admin/Admin.aspx");

                    }
                }

                else
                {
                    LoginUser.FailureText = "ERROR";
                }

            }
            catch (Exception exception)
            {
                Response.Write(exception.StackTrace);
            }
        }

       
    }
}

Rezultat:
0163f5b73d.png

Pozdrawiam

edytowany 2x, ostatnio: risksec7
NE
  • Rejestracja:ponad 9 lat
  • Ostatnio:około 8 lat
  • Postów:186
0

exception.Message też by się przydało podać w razie niepowodzenia, bo oprócz tego, gdzie się wywala (var rd = comm.ExecuteReader();), warto byłoby mieć wskazówkę, co poszło źle.


(konto nieaktywne)
R7
  • Rejestracja:około 9 lat
  • Ostatnio:około 9 lat
  • Postów:2
0

Po zmianie sql command na "select login,role from [user] where login=@login and password=@password" nie ma błędu, ale przekierowuje wszystkich użytkowników do AdminPage.aspx (prawidłowo pobiera login/hasło z db).
Wydaje mi się, że problem może być w string role = rd["role"].ToString();
Debugger pokazuje wartość null
Macie jakieś pomysły czemu może zamiast wartości roli przekazywać null?

edytowany 1x, ostatnio: risksec7

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.