質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

Q&A

解決済

4回答

15913閲覧

Windows フォーム アプリにログインフォームを実装したいです.

mimi3103

総合スコア8

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

0グッド

0クリップ

投稿2018/10/02 07:56

前提・実現したいこと

Visual Studio2017のWindows フォームアプリにてC#でアプリを作成中です.
ログイン画面の実装のユーザ認証に関しまして,わからない部分があり困っています.

テキストボックスを2つ,ボタンを2つ配置しまして,ユーザーネームとパスワードをユーザに入力してもらい,それが登録情報と一致してればメインアプリへ遷移するといったイメージのものを作成したいです.

発生している問題・エラーメッセージ

① プログラム内に,ユーザ名,パスワードを配列などにあらかじめ入れておいてそれとテキストボックスの値を比較する.

② Excelでユーザ名パスワード,社員番号などをまとめたシートを作成し,プログラム内でその値を呼び出し,テキストボックスの値と比較する.

上記のような2つの方法で,認証を行っていました.しかしとてもきれいな認証の仕方とは言えず,登録人数が増えれば増えるほど,プログラムもすごく長くなってしまうため,別の方法を検討したいです.

エラーメッセージ

該当のソースコード

C#

1 2namespace patlite_20180907 3{ 4 public partial class LogInForm : MetroForm 5 { 6 string filepath = @"C:data\App_user.xlsx"; 7 object[] array1 = new object[20]; 8 object[] array2 = new object[20]; 9 10 public LogInForm() 11 { 12 InitializeComponent(); 13 } 14 15 // ユーザ名,パスワードが共に一致した場合 16 private void Auth() 17 { 18 MessageBox.Show("パスワードを受け付けました"); // Windowsにて表示 19 this.Close(); // フォームを閉じる 20 } 21 // ユーザ名,パスワードが一致しない場合 22 private void Noauth() 23 { 24 MessageBox.Show("認証に失敗しました"); 25 userTextbox.Clear(); // User Nameのテキストをリセット 26 passTextbox.Clear(); // Pass Wordのテキストをリセット 27 userTextbox.Focus(); // User Name入力にカーソルをフォーカス 28 } 29 30 private void LoginButton_Click(object sender, EventArgs e) 31 { 32 XLWorkbook workbook = new XLWorkbook(filepath); 33 IXLWorksheet worksheet = workbook.Worksheet(1); 34 for (int i = 6; i < 25; i++) 35 { 36 array1[i - 6] = worksheet.Cell(i, 1); 37 array2[i - 6] = worksheet.Cell(i, 9); 38 if (array1[i] == userTextbox && array2[i] == passTextbox) 39 { 40 Auth(); 41 break; 42 } 43 else if (i == 24) 44 { 45 Noauth(); 46 } 47 } 48 } 49 50 private void CancelButton_Click(object sender, EventArgs e) 51 { 52 Application.Exit(); // アプリを終了 53 } 54 55 private void LogInForm_Load(object sender, EventArgs e) 56 { 57 this.ControlBox = false; 58 } 59 } 60} 61

補足情報(FW/ツールのバージョンなど)

Visual Studio 2017 C# windows7

SQLserverでデータベース作成に関しても調べたのですが,知識不足で自分のログイン実装にどう取り入れればいいかがわからず,断念してしまいました.

素人のわかりにくい説明で申しわけないですが,ここまで読んでくださってありがとうございます.
SQLserver含め,なにか方法をご存知の方いっらしゃいましたら,教えていただきたいです.
よろしくお願い致します.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kenshirou

2018/10/02 08:13

なぜそのアプリでユーザ認証が必要なのでしょうか。認証後のメインアプリでは何ができるのでしょうか?メインアプリでできることが各ユーザ共有のリソースを使うものであれば、認証が必要だということは理解できるのですが、そこら辺が分からないので質問しました。
Zuishin

2018/10/02 23:17

この質問には二つの質問が含まれています。一つは「ID とパスワードの永続化をどうするか」もう一つは「ログインの処理はどのようにすべきか」これらの質問に答える為には認証のセキュリティーレベルをどうするかという情報が必要です。一般に、ログインしたユーザーに何らかの権限を与え、ユーザー毎に権限が違う場合や、ログインしたユーザーが自分の好みの情報や設定を蓄積し、他人に見られたり改竄されたりしてはまずい場合にパスワードを設定し、パスワードは厳密に管理されます。Excel で生のパスワードを管理するくらいセキュリティーレベルが低くても良い場合には、そもそもパスワードが不要とも言えます。セキュリティーはユーザー同士の信頼によって成り立ち、ID だけをキーボードから打ち込む(リストから選択するのではなく)ので十分です。必要とされるセキュリティーレベルによって永続化の方法もユーザー判別の方法も変わってくるでしょう。何のために認証するのか、他人の ID でログインできることがどのくらいまずいのかという追加情報が必要なのではないかと思います。
guest

回答4

0

テキストボックスを2つ,ボタンを2つ配置しまして,ユーザーネームとパスワードをユーザに入力してもらい,それが登録情報と一致してればメインアプリへ遷移するといったイメージのものを作成したいです.

質問者さんの環境で実用になるかどうかは分かりませんが、ASP.NET の Membership オブジェクトと Roles オブジェクトを Windows Forms アプリケーションでも利用できます。

詳しくは以下の記事を見てください。

Windows Forms アプリで Membership を利用
http://surferonwww.info/BlogEngine/post/2014/02/11/aspnet-membership-and-roles-objects-usable-in-windows-forms-application.aspx

SQL Server の利用が基本ですが、プロバイダを自作すれば Access でも可能ですし、ユーザーの人数が少なければ app.config にユーザー情報を登録しても使えるはずです。

やってやれないことはないレベルの話で、ここまでやるのは無理かもしれませんが、ご参考まで。

投稿2018/10/02 08:15

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ClosedXmlですよね?
var table = sheet.getRangeUsed().AsTable()とかしたうえで、table.DataRangeかなにかをLinqでまわせば、forの上限をいちいち手直しするなんてことは発生しないと思います。

また、認証をハードコード(プログラムに書く)パターンもあるらしいので、認証は別クラスに分けてつくったほうがいいんじゃないかと思われます。

投稿2018/10/02 09:08

papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

ユーザーとIDの管理をデータベースで行うのであれば、SQLiteを使ったらどうでしょうか?
SQLServerだとサーバーを別途立てるか、サーバーをそのアプリが動作するPCにインストールしなければいけません。
SQLiteであればファイルベースのデータベースなので、手軽に扱うことができます。(SQLIteデータベースの中を見るためのツールも多数あります)

Visual StudioならNuGetでインストールすれば簡単に使うことができます。

「C# Sqlite」でググれば多数ヒットします。
例えば、以下のURLなどはわかりやすいかと。

C#でSQLite3を使ってみる

ただ、パスワードを保管する場合は暗号化して入れるか、または、ハッシュデータでパスワードチェックする必要があります。

投稿2018/10/02 08:27

PineMatsu

総合スコア3579

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

1,2の方法のままシンプルにするなら一度『登録情報』をDictionary型などに格納してしまい、Linqを使ってUser名及びPassがともに合致するレコードが一件以上あれば認証を通すといった形にするとかはどうですか?

投稿2018/10/02 08:18

Yuki_S

総合スコア356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問