2016-07-12 7 views
-2

私のwinformsデスクトップアプリケーションのユーザーは、私はユーザーログシステムを持っています。ユーザーがログに記録されているかどうかを確認するロジックを設定する場所が不明です。ログインしている場合は、メインウィンドウを表示するか、ログインしていない場合はログインフォームを表示します。C#winformsユーザーがログオンしているかどうかを確認する場所

まず、winformsはセッションをサポートしていないため、データベースをログに記録しないようにしています。私は静的Userクラスのどこに私がsuper_admin資格情報を格納し、このアプリで十分です。

だから私の最初の試みは、メインウィンドウのフォームが示したされる前にメインですべてを設定することです:

Program.csの

[STAThread] 
static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 

    if (!User.IsLogged) 
    { 
     Application.Run(new Login()); 
    } 

    Application.Run(new Login());   
} 

またはコンストラクタ内部やLoadにこの内部MainWindowフォームを設定することをお勧めします?または静的内部MainWindowのコンストラクタ内にあるのでしょうか? MainWindowはmdiです!

あなたは私により良い方法を教えていただけますか?ここで

が静的​​である(User.cs):

private static string superAdminUsername = "admin"; 
private static string superAdminPassword = "123"; 


public static bool IsLogged 
{ 
    get 
    { 
     return isLogged; 
    } 
    set 
    { 
     isLogged = value; 
    } 
} 

public static bool Authenticate(string username, string password) 
{ 
    if (username == superAdminUsername && password == superAdminPassword) 
    { 
     isLogged = true; 
     return true; 
    } 

    return false; 
} 
+1

を」 「記録済み」とは「ログイン済み」とはまったく異なるものを意味します。また、プレーンテキストのパスワードをアプリにハードコーディングすることは、ハッキングするためのレシピにすぎません。 – mason

+0

私がこれをしていたら、プロジェクトのすべてのフォームが継承し、ロードするときに(OnShownまたはPerformLayout)、ユーザーがログインしているかどうかを確認する基本フォームを作成します。ユーザがログインする必要があるブロックモーダルダイアログ。 – AWinkle

+0

@mason am quote myself '私はsuper_adminの資格情報を保存している静的なユーザークラスを作成し、このアプリケーションで十分です。 @Winkleベースフォームは 'MainWindow'で、彼はMIDで、他のすべてのフォームはそのフォームの中に新しいタブでロードされます – Ivan

答えて

1

これは意見の問題の一種ですが、限り表示されている機密情報がないので、私は、メインウィンドウを作成し、そしてだろうメインウィンドウのLoadイベントハンドラで新しいログインウィンドウとloginWindow.ShowDialog()を使用してログインを要求します。これにより、ユーザーがログインするまでスレッドをブロックします。ユーザーがアプリケーションウィンドウを表示できますが、ポップアップが表示されます彼らが何か有用なことをする前に完了しなければならないダイアログ。 loginWindowが終了したら、使用されたログイン名を取得し、ログインが成功した場合は残りのデータを入力したり、ログインが間違っている場合はユーザーにプロンプ​​トを出してアプリケーションを終了したりできます。 (これは、ログインウィンドウにユーザー名とパスワードを確認するロジックが含まれていることと、ユーザーがアプリケーションを使用するためにログインしていなければならないことを前提としています)。

この方法では、ユーザーがプログラムを使用している場合にユーザーがログインしていると見なすことができ、 "IsLoggedIn"ブールを格納する代わりにユーザー名を格納することができます。

ユーザーがログインせずに基本的な操作を行うことができる場合は、プログラムを起動してログインウィンドウを作成する「ログイン」ボタンをクリックするだけです。

0

ユーザーまでのダイアログが認証されると、ユーザはあきらめる場合は中止、ログインフォームを示す考えることができます:

while (!User.IsLoggedIn) 
{ 
    string user; 
    string pass; 
    if (Login.Show(out user, out pass) == DialogResult.OK) 
    { 
     User.Authenticate(user, pass); 
    } 
    else 
    { 
     MessageBox("Unable to log in!"); 
     break; 
    } 
} 

if (User.IsLoggedIn) 
{ 
    Application.Run(new MainForm()); 
} 

を、ログインフォームは、このようなものになります。

class Login : Form 
{ 
    TextBox User; 
    TextBox Pass; 
    public Login() 
    { 
     User = new TextBox(); 
     User.Bounds = new Rectangle(5, 5, 100, 20); 
     Controls.Add(User); 

     Pass = new TextBox(); 
     Pass.Bounds = new Rectangle(5, 25, 100, 20); 
     Controls.Add(Pass); 

     Button ok = new Button(); 
     ok.Text = "OK"; 
     ok.DialogResult = DialogResult.OK; 
     ok.Bounds = new Rectangle(5, 50, 100, 20); 
     Controls.Add(ok); 

     Text = "Login"; 
    } 

    public static DialogResult Show(out string user, out string pass) 
    { 
     Login self = new Login(); 
     DialogResult ret = self.ShowDialog(); 
     user = self.User.Text; 
     pass = self.Pass.Text; 
     return ret; 
    } 
} 
関連する問題