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

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

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

Entity Frameworkは、.NET Framework 3.5より追加されたデータアクセス技術。正式名称は「ADO.NET Entity Framework」です。データベースエンジンに依存しておらず、データプロバイダの変更のみで様々なデータベースに対応できます。

C#

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

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

Q&A

1回答

1809閲覧

ASP.NET MVC5 ログイン機能を追加する

blackdifferent

総合スコア25

Entity Framework

Entity Frameworkは、.NET Framework 3.5より追加されたデータアクセス技術。正式名称は「ADO.NET Entity Framework」です。データベースエンジンに依存しておらず、データプロバイダの変更のみで様々なデータベースに対応できます。

C#

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

ASP.NET MVC Framework

ASP.NET MVC Frameworkは、MVCパターンをベースとした、マイクロソフトのウェブアプリケーション開発用のフレームワークです。

0グッド

1クリップ

投稿2019/01/10 04:56

編集2019/01/10 06:47

こんにちわ。
ASP.NET MVC5でWeb勤務表を作成しています。(VisualStudio2017)
Web勤務表にログインするのに、あらかじめSQLServerに登録しているUserIDとPasswordで認証してログインするようにしたいです。
プロジェクトデフォルトに備わっているASP.Net Identityの個人ユーザーアカウント認証を利用したのですが、ユーザーがメールアドレスとパスワードを設定し、ログインする仕様になっていて、それをどのように修正したらよいか分かりません。
何かアドバイスを頂けると嬉しいです。

<調査したことを追記します>
AcountViewModels.csのLoginViewModelのEmailをEmp_numに変更し、AccountController.csのLogin(post)でDBにアクセスし、入力した従業員番号とパスワードと一致するものがあるかを調べる処理を追加しました。これにより一応ログインの処理は実装出来ましたが、前までユーザ名が表示されていたところに何も表示されなくなってしまいました。おそらくawait SignInManager.PasswordSignInAsyncの処理を省いたせいで、userIdentityに何も入らなくなってしまったと思うのですが、このへんをうまく実装する方法がわかりません。

以下に自分が追加した箇所のコードを載せます。

モデル:

namespace WebApplication8.Models { ・・・ public class LoginViewModel { [Required] [Display(Name = "従業員番号")] public string Emp_num { get; set; } [Required] [DataType(DataType.Password)] [Display(Name = "パスワード")] public string Password { get; set; } [Display(Name = "このアカウントを記憶する")] public bool RememberMe { get; set; } } ・・・ }

コントローラ:

namespace WebApplication8.Controllers {     ・・・ // // POST: /Account/Login [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) { if (!ModelState.IsValid) { return View(model); } // これは、アカウント ロックアウトの基準となるログイン失敗回数を数えません。 // パスワード入力失敗回数に基づいてアカウントがロックアウトされるように設定するには、shouldLockout: true に変更してください。 //var result = await SignInManager.PasswordSignInAsync(model.Emp_num, model.Password, model.RememberMe, shouldLockout: false); var result = SignInStatus.Success; var PersonalInfos = from a in db.TPersonalInfo where a.emp_num == model.Emp_num && a.password == model.Password select a; if (PersonalInfos.Count() == 0) { result = SignInStatus.Failure; } switch (result) { case SignInStatus.Success: return RedirectToLocal(returnUrl); case SignInStatus.LockedOut: return View("Lockout"); case SignInStatus.RequiresVerification: return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe }); case SignInStatus.Failure: default: ModelState.AddModelError("", "無効なログイン試行です。"); return View(model); } } ・・・ } }

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

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

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

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

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

guest

回答1

0

プロジェクトデフォルトに備わっているASP.Net Identityの個人ユーザーアカウント認証を利用したのですが、ユーザーがメールアドレスとパスワードを設定し、ログインする仕様になっていて、それをどのように修正したらよいか分かりません。

ASP.NET Identity 2.0 以降、テンプレートで自動生成したプロジェクトではデータベースの UserName と Email に同じメールアドレスを使うことが前提になっているので、それを無理やり(?)UserName に任意の ID を使うように変更すると、どういう副作用があるか分かりません。

そのままメールアドレスを使うか、プロファイル情報として任意のハンドル名を追加してそれを使うことをお勧めします。

どうしてもということであれば、Visual Studio 2017 は分かりませんが、Visual Studio 2015 のテンプレートで生成する Web Forms の Web サイトプロジェクト([新規作成(N)]⇒[Web サイト(W)]から作成)が以前のように任意のユーザー ID を使用しています。それを見ると参考になるかもしれません。

もしくは、ASP.NET Identity は止めて、MVC3 以前で使われていた FormsAuthenticationModule + SqlMemberShipProvider を使うか、MVC4 の SimpleMembershipProvider を使うことでも目的は果たせると思います。(お勧めはしませんが)

投稿2019/01/10 07:31

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

blackdifferent

2019/01/10 08:07

早速の回答ありがとうございます。 やはりデフォルトで作成されるコードをいじるのは良くないんですね。 アドバイスいただいたことをふまえ、再検討してみたいと思います。
退会済みユーザー

退会済みユーザー

2019/01/10 08:28 編集

> やはりデフォルトで作成されるコードをいじるのは良くないんですね。 いじるとどういう副作用があるか、好ましからざる副作用であればそれを回避できる手段が取れるか等々、全てわかった上でやるなら良いと思います。 UserName と Email が同じになるのは、登録する際のアクションメソッドで、 var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; としているからですが、これを UserName にメールアドレスでなく任意の ID(質問者さんのケースでは社員番号?)を入力できるようにしたとして、ASP.NET Identity の認証システム全体がきちんと動くかどうか、少なくとも自分は分かりません。 質問者さんが分かるのであればその方向で進めてみても良いかもしれませんが・・・
退会済みユーザー

退会済みユーザー

2019/01/23 04:23

その後どうされたのでしょう? 放置しておかないできちんとフィードバックを返せませんか? マナーとして。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問