Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C#: Käyttäjätunnus ja salasana

Sivun loppuun

muppi [15.11.2012 00:08:54]

#

Olen TÄYSIN noviisi näiden asioiden kanssa, miten windows alustalla saan toteutettua niin, että ohjelma tarkistaa tunnuksen ja salasanan, jos nämä ovat oikein, ohjelma jatkaa eteenpäin.
Nämä siis luetaan tekstitiedostosta, mutta olen hieman ulapalla miten tekstitiedostosta saa nämä tiedot tarkistettua. Mitä koodia käyttäen? Kaikki apu tarpeen.


Itselläni käytössä visual studio 2010.

groovyb [15.11.2012 01:17:22]

#

Tarkennappa hieman. Mitä aluetta projektisi koskee?
(esim. ASP, WPF, Windows Forms application?)

muppi [15.11.2012 12:30:27]

#

Windows Forms application

Lisäys:

Mihin muotoon käyttäjätunnus ja salasanat kannattaa tekstitiedostoon kirjoittaa, jotta ne voidaan lukea järkevästi vai onko sillä väliä? En siis ymmärrä millä koodilla saan kirjautumisen toimimaan, jotta ohjelma tunnistaisi käyttäjätunnuksen ja salasanan oikeaksi, koska käyttäjiä on monta, helppiä?
Kirjoitanko tekstitiedostoon käyttäjätunnukset ja salasanan esimerkiksi näin:

käyttäjätunnus;salasana
tunnari;salis
tunnukseni;salasanani
abc;123

Vai johonkin toiseen muotoon?

Metabolix [15.11.2012 17:44:12]

#

Mitä hyötyä ajattelit salasanasta olevan, jos se on selkokielisenä tiedostossa, jonka kuka tahansa voi lukea?

Tarkistaminen sinänsä on hyvin helppoa: teet vain silmukan, jossa tarkistat, onko millään rivillä oikeita tietoja. Jos tässä on jotain epäselvää, kannattaa varmaan lukea jokin C#-alkeisopas, jossa selitetään sellaisia asioita kuin silmukka, ehtolause ja muuttujat.

neau33 [15.11.2012 18:23:33]

#

Moi muppi

tunnus/salasana parin tarkistus tekstitiedostosta voisi näyttää vaikka tältä:

'Pääformi (väännetty SharpDevelope 4.2:lla)
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace ChkUser
{
    public partial class MainForm : Form
    {

        public MainForm()
        {

            InitializeComponent();
        }

        void MainFormLoad(object sender, EventArgs e)
        {
            FormLogin frmLogin = new FormLogin();
            frmLogin.ShowDialog();
            frmLogin.Dispose();
            if(!frmLogin.logged)
            {
                this.Dispose();
            }
        }

    }
}
'Kirjautumislomake
using System;
using System.IO;
using System.Drawing;
using System.Windows.Forms;

namespace ChkUser
{
    public partial class FormLogin : Form
    {
        private bool _logged = false;

        public bool logged
        {
            get{
                return _logged;
            }
            set
            {
                _logged = value;
            }
        }

        public FormLogin()
        {
            InitializeComponent();
        }

        void Button1Click(object sender, EventArgs e)
        {

            if(textBox1.Text == String.Empty){
                textBox1.Focus(); return;
            }
            if(textBox2.Text == String.Empty){
                textBox2.Focus();return;
            }

            string userdata = textBox1.Text + ";" + textBox2.Text;
            string path = Application.StartupPath + "\\userdata.txt"; //esim.

            using (StreamReader sr = new StreamReader(path))
            {
                while (sr.Peek() >= 0)
                {
                    if(sr.ReadLine() == userdata)
                    {
                        logged=true;

                    }
                }

                if(logged)
                {
                    this.Close();
                }
                else
                {
                    MessageBox.Show("Väärä tunnus ja/tai salasana");
                }
            }
        }


    }
}

halutessasi voit impata täältä valmiin esimerkkiprojektin

Mikäli taas päättäisit tallentaa tunnukset ja salasanat esim. MsAccess tietokantaan niin kirjautumislomake voisi näyttää vaikkapa seuraavalta

using System;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Windows.Forms;

namespace ChkUser
{

    public partial class FormLogin : Form
    {

        private bool _logged = false;

        public bool logged
        {
            get{
                return _logged;
            }
            set
            {
                _logged = value;
            }
        }

        public FormLogin()
        {
            InitializeComponent();
        }

        void Button1Click(object sender, EventArgs e)
        {

            if(textBox1.Text == String.Empty){
                textBox1.Focus(); return;
            }
            if(textBox2.Text == String.Empty){
                textBox2.Focus();return;
            }

            string dbpath = Application.StartupPath + "\\Tietokanta1.mdb"; //esim.
            OleDbConnection conn = new OleDbConnection();
            conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;"
            + @"Data source=" + dbpath;

            try
            {
                conn.Open();
                string sql = "SELECT user, pass FROM Taulukko1 Where user='" +
                textBox1.Text + "' And pass='" + textBox2.Text + "'";
                DataSet ds = new DataSet();
                OleDbDataAdapter da = new OleDbDataAdapter(sql, conn);
                da.Fill(ds, "Taulukko1");
                if(ds.Tables[0].Rows.Count > 0)
                {
                    logged = true;
                }
                da.Dispose(); ds.Dispose();
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                conn.Close();
            }

            conn.Dispose();

            if(logged)
            {
                this.Close();
            }
            else
            {
                MessageBox.Show("Väärä tunnus ja/tai salasana");
            }
        }

    }
}

halutessasi voit impata täältä esimerkkiprojektin Access versiona

muppi [15.11.2012 20:05:42]

#

Kiitos neau33, miljoonasti täytyy lähteä kokeilemaan noita!!

Metabolix: Aion myöhemmin muuttaa salasanatiivisteiksi (esim MD5, mutta jos sais ton alun edes toimimaan.

Lisäys:

Oi jes, aivan mahtavaa, sain toimimaan ton systeemin, kiitos vaan aivan älyttömästi neau33 kun jaksoit vaivaa nähdä!
Noviisina esitän vielä pienen jatkokysymyksen tähän, kirjautumisen jälkeen pitäisi aueta menu-valikko josta pääsee tekemään erilaisia muutoksia jne. eli toisin sanoen itse ohjelma starttaa vasta kirjautumisen jälkeen.
Tälle kannattaa oma form tehdä ilmeisesti, saanko tämän avattua kirjautumisen jälkeen suoraan tuosta "if(logged){this.Close(); }" eli closen tilalle tulisi formin nimi ja käsky? Oliko tarpeeksi vaikeasti kysytty.. :) vai vaatiiko se jonkun muun tavan lähestyä.

neau33 [15.11.2012 23:23:52]

#

Moi taas muppi!

Ei onnistu, eli älä tee kirjautumislomakkeen systeemiin muutoksia vaan lisää menun avaus pääformin Load_tapahtuman yhteyteen. Itse ohjelman tulisi mieluiten toimia suoraan pääformilla.

void MainFormLoad(object sender, EventArgs e)
{
    FormLogin frmLogin = new FormLogin();
    frmLogin.ShowDialog();
    frmLogin.Dispose();
    'kirjautumisen jälkeen
    if(!frmLogin.logged) //jos ei ole kirjauduttu (lomake on suljettu ikkunan ruksista)
    {
        this.Dispose(); //niin koko ohjelma suljetaan
    }

    //voit lisää tähän väliin koodin jolla avaat valinta menun...

    //elikä voit tehdä sen joko erillisellä lomakkeella (esim. FormMenu)
    //FormMenu frmMenu = new FormMenu();
    //frmMenu.ShowDialog();
    //frmMenu.Dispose();

    //tai vaihtoehtoisesti voit lisätä pääformiin esim. menustrip objektin,
    //jonka valikkojen valinnoilla voidaan muuttaa muuttujien arvoja ja
    //sitäkautta vaikuttaa ohjelmasi ulkoasuun ja käytönaikaiseen toimintaan...
}

muppi [15.11.2012 23:46:31]

#

Moikka taas, kiitos kun jaksat nähdä näinkin paljon vaivaa auttaaksesi!!

Itse sain toimimaan koodin tällä tavalla:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;


namespace WindowsFormsApplication4
{
    public partial class MainForm : Form
    {
        private bool _logged = false;

        public bool logged
        {
            get
            {
                return _logged;
            }
            set
            {
                _logged = value;
            }
        }



        public MainForm()
        {
            InitializeComponent();
        }

        private void MainForm_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {

            if (textBox1.Text == String.Empty)
            {
                textBox1.Focus(); return;
            }
            if (textBox2.Text == String.Empty)
            {
                textBox2.Focus(); return;
            }

            string userdata = textBox1.Text + ";" + textBox2.Text;
            string path = Application.StartupPath + "\\userdata.txt";

            using (StreamReader sr = new StreamReader(path))
            {
                while (sr.Peek() >= 0)
                {
                    if (sr.ReadLine() == userdata)
                    {
                        logged = true;
                    }
                }
                if (logged)
                {
                    this.Close();
                }
                else
                {
                    MessageBox.Show("Väärä tunnus ja/tai salasana");
                }
            }


        }
    }
}

Joten saako sen toimimaan tuohon? Vai onko tuo väärin toteutettu?

Lisäys:

Form näyttää jokseenkin tältä (hyvin yksinkertainen saa siis olla):

anna käyttäjätunnus: _______ (<=textBox1)
anna salasana: ______(<=textBox2)

|Kirjaudu| (<= button)

Tämän jälkeen avautusi seuraavanlainen valikko

form nimenä vaikkapa "menu"

|päivitä tuote| |päivitä hinta| |julkaise| |lopeta| (<= nämä kaikki buttoneita, ja näiden taakse tulevat omat koodinsa luonnollisesti)

neau33 [16.11.2012 00:23:21]

#

Moi taas!

Koodihan kyllä toimii ei siinä mitään, mutta jos annat oikein tunnuksen ja salasanan niin koko ohjelmasi sulkeutuu. Eli miksi ihmeessä yrität väkisin muuttaa sitä toimivaa kirjautumissysteemiä pääformille nappulan taakse?

No imppaa nyt vielä täältä VisualStudio 2012 Express'llä toteutettu C# esimerkki jossa menu on pääformilla...


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta