Multiple accounts for a single login details

Donald Symmons 2,856 Reputation points
2022-12-01T08:13:17.62+00:00

Hello everyone,
I REALLY NEED YOUR ASSISTANCE/HELP ON THIS
I have a very fascinating design which I want to achieve in my project. It may seem complex though but it will be great if I achieve it and I hope it will not be too misunderstanding; I hope you understand what I mean, and I will be totally grateful if I get help. Thank you.
If I have registered Admin (Admin A and Admin B) on my website application. I want a situation where Admin can invite users to be on his team. But what if the user is already registered to another Admin?
Example:
There are two Admin accounts currently registered (Admin A and Admin B), with emails (admin1@Monique gmx .com and adminB@Monique gmx .com). Then I have user A, with email (UserA@Monique gmx .com). When Admin A invites user A (UserA@Monique gmx .com) to join his team; if UserA@Monique gmx .com does not exists, then it should send an invite button for User A to register. But if UserA@Monique gmx .com exists then it should send a button for User A to login.
HERE IS WHERE IT BECOMES TRICKY:
If User A exists it simply means that User A is already registered under an Account; and has a password. Now, when Admin A sends User A an invite and User A is already registered; at that point Admin A must have re-inserted User A’s email and the same password User A used when registering, but under a different Name (which means that Admin A re-inserted User A’s existing login details but under Admin A’s name). Now User A will be registered under two admin accounts, so that after login and redirecting to dashboard, an option to switch accounts will be displayed on the dashboard. The user can switch account which he or she want to work on.
This is a sample image where user switch account.

266008-good-switch.png

At the same time, user A can register his own account as an admin with the same email (UserA@Monique gmx .com) but different name, because user A has existing account as a user to Admin A and Admin B, and can either work for Admin A, Admin B or for self.
The Table Schema will look like below, but I don’t know if it can get mixed up upon login. Maybe when someone tries to login it could cause irregularities in the table and maybe give errors

266053-table.png

The login will be where it will matter because when logging in, how will it be able read an email and password that appears multiple times in the table? This is where it gets more complex for me.
Now I want to have it that Admin cannot be registered twice as Admin but if another Admin sends an invite or re-inserts the same email and password an Admin used then that Admin can have his or her details in the database table but as a user to another account. Also, an Admin CANNOT be registered as a user under his own account. That is, one email should be registered as Admin with same name once and cannot be registered as User under that same name, but can be registered as user under a different name.

On the dashboard, it is going to display account information from database tables like below, where user can switch accounts by clicking dropdown that display the different account he is registered to

    protected void Page_Load(object sender, EventArgs e)  
    {  
            showdata1();  
    }  
  
    public void showdata1()  
    {  
        SqlConnection con = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\Dataregister.mdf;Integrated Security = True");  
        con.Open();  
        SqlCommand cmd = new SqlCommand();  
        cmd.CommandText = "SELECT * FROM userTable WHERE Uid = '" + Session["user"] + "'";  
        cmd.Connection = con;  
        SqlDataAdapter sda = new SqlDataAdapter();  
        DataSet ds = new DataSet();  
        sda.SelectCommand = cmd;  
        sda.Fill(ds, "detail");  
        if (ds.Tables[0].Rows.Count > 0)  
        {  
            named.Text = ds.Tables[0].Rows[0][2].ToString();  
            user.Text = ds.Tables[0].Rows[0][3].ToString();  
            createby.Text = ds.Tables[0].Rows[0]["CreatedBy"].ToString();  
        }  
    }  

These are pages to effect this:
Signup.aspx
InviteUser.aspx
Newuser.aspx
login.aspx
This is the code to register as new Admin. It should check if an email with the same name is already registered as an Admin and if it exists, it should not insert.

Signup code

  protected void Button1_Click(object sender, EventArgs e)  
    {  
        SqlConnection con = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\Dataregister.mdf;Integrated Security = True");  
        SqlDataReader dr;  
        using (SqlCommand cmd = new SqlCommand())  
        {  
            cmd.Parameters.Clear();  
            cmd.CommandText = "SELECT * FROM userTable WHERE email=@email OR Name=@Name";  
            cmd.Parameters.AddWithValue("@email", mailtxtbx.Text);  
            cmd.Parameters.AddWithValue("@Name", txtname.Text);  
            cmd.Connection = con;  
            con.Open();  
            dr = cmd.ExecuteReader();  
        }  
        if (dr.HasRows)  
        {  
            dvMessage.Visible = true;  
            Div1.Visible = false;  
            lblMessage.Text = "Email cannot be registered with same name";  
            lblMessage.ForeColor = System.Drawing.Color.Red;  
            mailtxtbx.Text = "";  
            lblsuccess.Visible = false;  
            lblMessage.Visible = true;  
            mailtxtbx.Focus();  
        }  
        else  
        {  
            con.Close();  
            if (mailtxtbx.Text != "" & pass.Text != "" & conpass.Text != "" & txtname.Text != "")  
            {  
                if (pass.Text == conpass.Text)  
                {  
                    if (Filedoc.PostedFile.FileName != "")  
                    {  
                        if (check1.Checked)  
                        {  
                            int Uid = -1;  
                            byte[] image;  
                            Stream s = Filedoc.PostedFile.InputStream;  
                            BinaryReader br = new BinaryReader(s);  
                            image = br.ReadBytes((Int32)s.Length);  
                            string query = @"INSERT INTO userTable (email, pass, Role, Name, CreatedBy, image, CreateDate, LastLogin) VALUES (@email, @pass, @Role, @Name, @CreatedBy, @image, @CreateDate, @LastLogin);  
                SELECT SCOPE_IDENTITY();";  
  
                            using (SqlCommand objCMD = new SqlCommand(query, con))  
                            {  
                                objCMD.Parameters.Add("@email", SqlDbType.VarChar, 50).Value = mailtxtbx.Text.Trim();  
                                objCMD.Parameters.Add("@pass", SqlDbType.VarChar, 100).Value = pass.Text.Trim();  
                                objCMD.Parameters.Add("@Role", SqlDbType.VarChar, 50).Value = "Admin";  
                                objCMD.Parameters.Add("@Name", SqlDbType.VarChar, 50).Value = txtname.Text.Trim();  
                                objCMD.Parameters.Add("@CreatedBy", SqlDbType.VarChar, 50).Value = mailtxtbx.Text.Trim();  
                                objCMD.Parameters.Add("@image", SqlDbType.VarBinary).Value = image;  
                                objCMD.Parameters.Add("@CreateDate", SqlDbType.DateTime, 100).Value = DateTime.Now;  
                                objCMD.Parameters.Add("@LastLogin", SqlDbType.DateTime, 100).Value = DateTime.Now;  
                                cmd.Connection = con;  
                                con.Open();  
                                object returnObj = objCMD.ExecuteScalar();  
  
                                if (returnObj != null)  
                                {  
                                    int.TryParse(returnObj.ToString(), out Uid);  
                                }  
                                con.Close();  
                            }  
  
                            if (Uid > 0)  
                            {  
                                query = @"INSERT INTO Archive (Uid, email, Name) VALUES (@Uid, @email, @Name)";  
                                using (SqlCommand objCMD = new SqlCommand(query, con))  
                                {  
                                    objCMD.Parameters.Add("@Uid", SqlDbType.Int, 50).Value = Uid;  
                                    objCMD.Parameters.Add("@email", SqlDbType.VarChar, 50).Value = mailtxtbx.Text.Trim();  
                                    objCMD.Parameters.Add("@Name", SqlDbType.VarChar, 50).Value = txtname.Text.Trim();  
                                    con.Open();  
                                    objCMD.ExecuteNonQuery();  
                                    SendActivationEmail(Uid);  
                                    lblsuccess.Text = "An Activation link has been sent to your Email.";  
                                    lblsuccess.Visible = true;  
                                    Div1.Visible = true;  
                                    lblsuccess.ForeColor = System.Drawing.Color.Green;  
                                    lblMessage.Visible = false;  
                                    dvMessage.Visible = false;  
                                    mailtxtbx.Text = "";  
                                    pass.Text = "";  
                                    conpass.Text = "";  
                                    txtname.Text = "";  
                                }  
                            }  
                            con.Close();  
                        }  
                        else  
                        {  
                            dvMessage.Visible = true;  
                            lblMessage.Visible = true;  
                            lblMessage.Text = "Please Check Box";  
                            lblsuccess.Visible = false;  
                            lblMessage.ForeColor = System.Drawing.Color.Red;  
                        }  
                    }  
                    else  
                    {  
                        dvMessage.Visible = true;  
                        lblMessage.Visible = true;  
                        lblMessage.Text = "Upload your Logo";  
                        lblsuccess.Visible = false;  
                        lblMessage.ForeColor = System.Drawing.Color.Red;  
                    }  
                }  
                else  
                {  
                    dvMessage.Visible = true;  
                    lblMessage.Visible = true;  
                    lblMessage.Text = "Passwords don't match";  
                    lblMessage.ForeColor = System.Drawing.Color.Red;  
                    conpass.Text = "";  
                    lblsuccess.Visible = false;  
                }  
            }  
            else  
            {  
                dvMessage.Visible = true;  
                lblMessage.Visible = true;  
                lblMessage.ForeColor = System.Drawing.Color.Red;  
                lblMessage.Text = "All Fields Are Required";  
                lblsuccess.Visible = false;  
            }  
        }          
   }  

Code to invite user: Here, I want it to check if the user email exists then it should send a login button instead of sending a new user sign up button. The when this user goes to login, it will login and redirect, then the user can choose to switch account.

protected void Page_Load(object sender, EventArgs e)  
    {  
        if (!this.IsPostBack)  
        {  
            showdata1();  
        }  
    }  
    public void showdata1()  
    {  
        SqlConnection con = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\Dataregister.mdf;Integrated Security = True");  
        con.Open();  
        SqlCommand cmd = new SqlCommand();  
        cmd.CommandText = "SELECT * FROM userTable WHERE Uid = '" + Session["user"] + "'";  
        cmd.Connection = con;  
        SqlDataAdapter sda = new SqlDataAdapter();  
        DataSet ds = new DataSet();  
        sda.SelectCommand = cmd;  
        sda.Fill(ds, "detail");  
        if (ds.Tables[0].Rows.Count > 0)  
        {  
            Label1.Text = ds.Tables[0].Rows[0]["Uid"].ToString();  
            labeladmin.Text = ds.Tables[0].Rows[0]["Name"].ToString();  
            mailtext.Text = ds.Tables[0].Rows[0]["email"].ToString();  
        }  
    }  
      
    protected void Button1_Click(object sender, EventArgs e)  
    {  
        if (!string.IsNullOrEmpty(Emailtxtbx.Text))  
        {  
            string adminID = Label1.Text.ToString();  
            using (MailMessage mm = new MailMessage("project@mail.com", Emailtxtbx.Text))  
            {  
                mm.Subject = "Membership Registration";  
                string body = "Hello " + Emailtxtbx.Text.Trim() + ",<br /><br />";  
                body += "You have just been invited to join the " + labeladmin.Text + " team";  
                body += "<br /><br />Please click the button below to sign up and join the " + labeladmin.Text + " team";  
                body += "<br /><br /><a style='display: block; width: 195px; height: 31px; background: #32CD32;padding: 10px;font-family: Nunito; text-align:left; border-radius: 5px;color: white;font-weight: 700;text-decoration: none;' href = '"  
                + Request.Url.AbsoluteUri.Replace("newmember", "NewUserSignup.aspx?Id=" + adminID) + "'>Sign up as Team Member</a>";  
                body += "<br /><br /><hr />";  
                body += "<br /><br />If you have questions regarding this invitation, kindly contact " + labeladmin.Text + " at";  
                body += "<br />" + mailtext.Text;  
                body += "<br /><br />Best Regards,<br />The Project Team";  
                mm.Body = body;  
                mm.IsBodyHtml = true;  
                SmtpClient smtp = new SmtpClient();  
                smtp.Host = "relay-hosting.secureserver.net";  
                smtp.EnableSsl = false;  
                NetworkCredential NetworkCred = new NetworkCredential("project@mail.com", "*************");  
                smtp.UseDefaultCredentials = true;  
                smtp.Credentials = NetworkCred;  
                smtp.Port = 25;  
                smtp.Send(mm);  
  
                Div1.Visible = true;  
                lblsuccess.Visible = true;  
                lblsuccess.Text = "Success";  
                lblsuccess.ForeColor = System.Drawing.Color.Green;  
                Div2.Visible = false;  
                Lblerror.Visible = false;  
            }  
        }  
        else  
        {  
            Div2.Visible = true;  
            Lblerror.Visible = true;  
            Lblerror.Text = "Please provide valid email address";  
            Lblerror.ForeColor = System.Drawing.Color.Black;  
            Div1.Visible = false;  
            lblsuccess.Visible = false;  
        }  
    }  

Code for new user sign up

SqlConnection con = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\Dataregister.mdf;Integrated Security = True");  
    protected void Page_Load(object sender, EventArgs e)  
    {  
        con.Open();  
        SqlCommand cmd = new SqlCommand();  
        cmd.CommandText = "SELECT Name FROM userTable WHERE Uid = '" + Request.QueryString["Id"] + "'";  
        cmd.Connection = con;  
        SqlDataAdapter sda = new SqlDataAdapter();  
        DataSet ds = new DataSet();  
        sda.SelectCommand = cmd;  
        sda.Fill(ds, "detail");  
        if (ds.Tables[0].Rows.Count > 0)  
        {  
            NameID.Text = ds.Tables[0].Rows[0]["Name"].ToString();  
        }  
    }  
  
    protected void Button1_Click(object sender, EventArgs e)  
    {  
        string invitedBy = GetInvitedBy(Convert.ToString(Request.QueryString["Id"]));  
        if (mailtxtbx.Text != "" & pass.Text != "" & conpass.Text != "")  
        {  
            if (check1.Checked)  
            {  
                using (SqlConnection con = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\Dataregister.mdf;Integrated Security = True"))  
                {  
                    using (SqlCommand cmd = new SqlCommand("INSERT INTO userTable (email, Name, pass, Role, CreatedBy, CreateDate, LastLogin) VALUES(@email,@Name,@pass,@Role,@CreatedBy,@CreateDate,@LastLogin)"))  
                    {  
                        using (SqlDataAdapter sda = new SqlDataAdapter())  
                        {  
                            cmd.CommandType = CommandType.Text;  
                            cmd.Parameters.AddWithValue("@email", mailtxtbx.Text.Trim());  
                            cmd.Parameters.AddWithValue("@Name", NameID.Text.Trim());  
                            cmd.Parameters.AddWithValue("@pass", pass.Text.Trim());  
                            cmd.Parameters.AddWithValue("@Role", "User");  
                            cmd.Parameters.AddWithValue("@CreatedBy", invitedBy);  
                            cmd.Parameters.AddWithValue("@CreateDate", DateTime.Now);  
                            cmd.Parameters.AddWithValue("@LastLogin", DateTime.Now);  
                            cmd.Connection = con;  
                            con.Open();  
                            cmd.ExecuteNonQuery();  
                            Div1.Visible = true;  
                            dvMessage.Visible = false;  
                            lblMessage.Visible = false;  
                        }  
                        con.Close();  
                    }  
                }  
            }  
            else  
            {  
                dvMessage.Visible = true;  
                lblMessage.Visible = true;  
                lblMessage.Text = "Please Check Box";  
                Div1.Visible = false;  
                lblMessage.ForeColor = System.Drawing.Color.Red;  
            }  
        }  
  
        else  
        {  
            dvMessage.Visible = true;  
            lblMessage.Visible = true;  
            lblMessage.ForeColor = System.Drawing.Color.Red;  
            lblMessage.Text = "*All Fields Are Required*";  
            lblsuccess.Visible = false;  
            Div1.Visible = false;  
        }  
    }  
  
    private string GetInvitedBy(string id)  
    {  
        string invitedBy = "";  
        using (SqlConnection con = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\Dataregister.mdf;Integrated Security = True"))  
        {  
            using (SqlCommand cmd = new SqlCommand("SELECT email FROM userTable WHERE Uid = @Id"))  
            {  
                cmd.CommandType = CommandType.Text;  
                cmd.Parameters.AddWithValue("@Id", id);  
                cmd.Connection = con;  
                con.Open();  
                invitedBy = Convert.ToString(cmd.ExecuteScalar());  
                con.Close();  
            }  
        }  
  
        return invitedBy;  
    }  

login code

protected void Button1_Click(object sender, EventArgs e)  
    {  
        dvMessage.Visible = false;  
        lblMessage.Visible = false;  
        if (!string.IsNullOrEmpty(txtUsername.Text) & !string.IsNullOrEmpty(txtPassword.Text))  
        {  
            SqlConnection con = new SqlConnection("Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\\Dataregister.mdf;Integrated Security = True");  
            string check = "SELECT Uid FROM userTable WHERE pass = @pass COLLATE SQL_Latin1_General_CP1_CS_AS AND email = @email AND pass = @pass";  
            SqlCommand com = new SqlCommand(check, con);  
            con.Open();  
            com.Parameters.AddWithValue("@email", txtUsername.Text.Trim());  
            com.Parameters.AddWithValue("@pass", txtPassword.Text.Trim());  
            string Uid = Convert.ToString(com.ExecuteScalar());  
            con.Close();  
  
            if (!string.IsNullOrEmpty(Uid))  
            {  
                string users = "";  
                using (SqlCommand cmd = new SqlCommand("SELECT Uid FROM UserActivation WHERE Uid = @Uid"))  
                {  
                    cmd.CommandType = CommandType.Text;  
                    cmd.Parameters.AddWithValue("@Uid", Uid);  
                    cmd.Connection = con;  
                    con.Open();  
                    users = Convert.ToString(cmd.ExecuteScalar());  
                    con.Close();  
                }  
                if (string.IsNullOrEmpty(users))  
                {  
                    int user = 0;  
                    using (SqlCommand cmd = new SqlCommand("SELECT Uid FROM userTable WHERE pass = @pass COLLATE SQL_Latin1_General_CP1_CS_AS AND email = @email AND pass = @pass"))  
                    {  
                        cmd.CommandType = CommandType.Text;  
                        cmd.Parameters.AddWithValue("@email", txtUsername.Text.Trim());  
                        cmd.Parameters.AddWithValue("@pass", txtPassword.Text.Trim());  
                        cmd.Connection = con;  
                        con.Open();  
                        user = Convert.ToInt32(cmd.ExecuteScalar());  
                        con.Close();  
                    }  
                    if (user > 0)  
                    {  
                        Session["user"] = user;  
                        con.Open();  
                        string query = "SELECT LastLogin, IsActive from Users WHERE Uid = @Uid";  
                        using (SqlCommand cmd = new SqlCommand(query, con))  
                        {  
                            cmd.Parameters.AddWithValue("@Uid", Session["user"]);  
                            Session["LastLogin"] = Convert.ToDateTime(cmd.ExecuteScalar());  
                        }  
                        string UpdateLog = @"UPDATE Users SET LastLogin=@dateandtime, IsActive=@IsActive WHERE Uid = @Uid";  
                        using (SqlCommand cmd = new SqlCommand(UpdateLog, con))  
                        {  
                            cmd.Parameters.AddWithValue("@dateandtime", DateTime.Now);  
                            cmd.Parameters.AddWithValue("@IsActive", "1");  
                            cmd.Parameters.AddWithValue("@Uid", Session["user"]);  
                            cmd.ExecuteNonQuery();  
                        }  
                        con.Close();  
                    }  
                    Response.Redirect("dashboard.aspx");  
                }  
                else  
                {  
                    dvMessage.Visible = true;  
                    lblMessage.Visible = true;  
                    lblMessage.ForeColor = System.Drawing.Color.Red;  
                    lblMessage.Text = "Account has not been activated";  
                    txtPassword.Text = "";  
                    txtPassword.Focus();  
                }  
            }  
            else  
            {  
                dvMessage.Visible = true;  
                lblMessage.Visible = true;  
                lblMessage.ForeColor = System.Drawing.Color.Red;  
                lblMessage.Text = "Invalid Login Details";  
                txtPassword.Text = "";  
                txtPassword.Focus();  
            }  
        }  
        else  
        {  
            dvMessage.Visible = true;  
            lblMessage.Visible = true;  
            lblMessage.ForeColor = System.Drawing.Color.Red;  
            lblMessage.Text = "All Fields are Required";  
        }  
    }  
ASP.NET
ASP.NET
A set of technologies in the .NET Framework for building web applications and XML web services.
3,251 questions
C#
C#
An object-oriented and type-safe programming language that has its roots in the C family of languages and includes support for component-oriented programming.
10,233 questions
{count} votes