Estoy creando una Aplicación de Formularios de Windows con C# y .NET Framework 4.5 en mi Visual Studio 2012.

Estoy queriendo ahora para crear un Formulario de inicio de Sesión, donde el usuario puede poner algún nombre de usuario y contraseña (creado en una base de datos antes) y la aplicación valida y de inicio de sesión del usuario. Y si es posible, con un «Funciones de Control».

Trato de buscar en el Google, pero no me encuentra este contenido relacionado con los Formularios Windows forms, sólo en ASP.NET.

Hace .NET Framework tiene ninguna buena (y oficial) de la solución para resolver los problemas de autenticación en WinForms?

2 Comentarios

  1. 3

    No. El sistema de Pertenencia es parte de Asp.net y mientras que usted puede ser capaz de utilizarlo en una aplicación de winforms, no sería muy limpio.

    Si usted ya tiene el nombre de usuario y contraseñas en la base de datos, entonces su mejor apuesta es que se acaba de implementar en recta hacia adelante sistema de autenticación, a menos que usted está preocupado acerca de la gente de ingeniería inversa del código… En ese caso, es mucho más avanzada cosa es segura contra la ingeniería inversa.

    EDICIÓN:

    Microsoft tiene la Windows Identity Foundation, pero realmente se trata de un sistema más complejo de lo que usted probablemente desee.

    • Yo entiendo. Tengo la base de datos de usuarios creados. Voy a crear una validación de estos datos y mostrar el panel formulario si existe el usuario y la contraseña es correcta. ¿Qué te parece? Gracias por la respuesta, por cierto. Y lo siento por mi inglés freak. 🙂
  2. 1

    Por lo general crear un nuevo formulario de algo como esto.

    public partial class LoginForm : Form
    {
    public bool letsGO = false;
    public LoginForm()
    {
    InitializeComponent();
    textUser.CharacterCasing = CharacterCasing.Upper;
    }
    public string UserName
    {
    get
    {
    return textUser.Text;
    }
    }
    private static DataTable LookupUser(string Username)
    {
    const string connStr = "Server=(local);" +
    "Database=LabelPrinter;" +
    "trusted_connection= true;" +
    "integrated security= true;" +
    "Connect Timeout=1000;";
    //"Data Source=apex2006sql;Initial Catalog=Leather;Integrated Security=True;";
    const string query = "Select password From dbo.UserTable (NOLOCK) Where UserName = @UserName";
    DataTable result = new DataTable();
    using (SqlConnection conn = new SqlConnection(connStr))
    {
    conn.Open();
    using (SqlCommand cmd = new SqlCommand(query, conn))
    {
    cmd.Parameters.Add("@UserName", SqlDbType.VarChar).Value = Username;
    using (SqlDataReader dr = cmd.ExecuteReader())
    {
    result.Load(dr);
    }
    }
    }
    return result;
    }
    private void HoldButton()
    {
    if (string.IsNullOrEmpty(textUser.Text))
    {
    //Focus box before showing a message
    textUser.Focus();
    MessageBox.Show("Enter your username", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
    //Focus again afterwards, sometimes people double click message boxes and select another control accidentally
    textUser.Focus();
    textPass.Clear();
    return;
    }
    else if (string.IsNullOrEmpty(textPass.Text))
    {
    textPass.Focus();
    MessageBox.Show("Enter your password", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
    textPass.Focus();
    return;
    }
    //OK they enter a user and pass, lets see if they can authenticate
    using (DataTable dt = LookupUser(textUser.Text))
    {
    if (dt.Rows.Count == 0)
    {
    textUser.Focus();
    MessageBox.Show("Invalid username.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
    textUser.Focus();
    textUser.Clear();
    textPass.Clear();
    return;
    }
    else
    {
    string dbPassword = Convert.ToString(dt.Rows[0]["Password"]);
    string appPassword = Convert.ToString(textPass.Text); //we store the password as encrypted in the DB
    Console.WriteLine(string.Compare(dbPassword, appPassword));
    if (string.Compare(dbPassword, appPassword) == 0)
    {
    DialogResult = DialogResult.OK;
    this.Close();
    }
    else
    {
    //You may want to use the same error message so they can't tell which field they got wrong
    textPass.Focus();
    MessageBox.Show("Invalid Password", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
    textPass.Focus();
    textPass.Clear();
    return;
    }
    }
    }
    }
    private void textPass_KeyDown_1(object sender, KeyEventArgs e)
    {
    if (e.KeyCode == Keys.Return)
    {
    HoldButton();
    }
    }
    private void buttonLogin_Click(object sender, EventArgs e)
    {
    HoldButton();
    }
    private void textPass_KeyDown(object sender, KeyEventArgs e)
    {
    if (e.KeyCode == Keys.Return)
    {
    HoldButton();
    }
    }
    }

    a continuación, en su mainform hacer esto:

    public Form1(string userName)
    {
    //this is incase a user has a particular setting in your form
    //so pass name into contructer
    }

    a continuación, por último:

    static class Program
    {
    ///<summary>
    ///The main entry point for the application.
    ///</summary>
    [STAThread]
    static void Main()
    {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    LoginForm fLogin = new LoginForm();
    if (fLogin.ShowDialog() == DialogResult.OK)
    {
    Application.Run(new Form1(fLogin.UserName));
    }
    else
    {
    Application.Exit();
    }
    //Application.Run(new Form1());
    }

    Esperemos que esto le da una idea general sobre qué hacer, aunque estoy seguro de que la suya una forma mucho mejor para hacer esto, también tenga en cuenta que esto no es realmente seguro front end.

    Espero que esta ayuda:

    EDIT: ah, y antes que me olvide que no utiliza la

    Select password From dbo.UserTable (NOLOCK) Where UserName = @UserName 

    Me acaba de tirar en un procedimiento almacenado. Pero de todos modos esta no es la mejor manera de autenticar, pero es una solución de trabajo de al menos te vas espero

Dejar respuesta

Please enter your comment!
Please enter your name here