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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Razor

RazorはASP.NET Web PagesとASP.NET MVCで使われているビュー・エンジンです。HTMLマークアップとC#またはVisual Basicのコードに対応しています。マークアップとコードの間の切り替えは"@"で記されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

解決済

ASP.NET Identityでのログインをメールアドレスとユーザー名を同列にしない方法

pomu.pomupomu
pomu.pomupomu

総合スコア18

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Razor

RazorはASP.NET Web PagesとASP.NET MVCで使われているビュー・エンジンです。HTMLマークアップとC#またはVisual Basicのコードに対応しています。マークアップとコードの間の切り替えは"@"で記されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

1回答

0評価

1クリップ

4064閲覧

投稿2018/08/20 09:27

編集2018/08/20 09:29

前提・実現したいこと

ASP.NET mvcにて掲示板を作成している初学者です。不束者ですがよろしくお願いします。
現在、ASP.NET Identityでのログイン方法をEmailアドレスで行いたいと思い投稿しました。
(最初からEmailアドレスでのログインにはなっていますが、DBにおけるAspNetUsersテーブル内のEmailのみならず、UserNameの項目にもEmailアドレスが書き込まれるため、「ようこそpochi@pochi.comさん」みたいにヘッダー部に表示されるため都合が悪いと考えました。)

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

ログインフォームにユーザー名とパスワードでログインすることはできるようになりましたが、Emailアドレスでログインすることができません。ユーザー名のモデル参照部分をmodel.Emailに差し替えましたが、次のように「無効なログイン試行です」という表示がされます。
イメージ説明

試したこと

以下に記したコードのように試した結果、うまくいきませんでした。
安直ですが、「model.UserNameと記された箇所をmodel.Emailと修正し、Model定義については[EmailAddress]を挿入したらいいのではないか?」と考え実行しました。
(無知ゆえに自分のあずかり知らないページがあるかもしれません、その場合は申し訳ありませんが指摘してくだされば加筆します。)

以下にASP.NETで生成した部分でのログインにまつわり、編集した部分を記します。

AccountviewModel

C#

public class LoginViewModel { [Required] [EmailAddress] [Display(Name = "電子メール")] public string Email { get; set; } [Required] [DataType(DataType.Password)] [Display(Name = "パスワード")] public string Password { get; set; } [Display(Name = "このアカウントを記憶する")] public bool RememberMe { get; set; } }

Login.cshtml

C#

@using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" })) { @Html.AntiForgeryToken() @Html.ValidationSummary(true, "", new { @class = "text-danger" }) <dl> <dt>電子メール</dt> <dd> @Html.TextBoxFor(m => m.Email, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.Email, "", new { @class = "text-danger" }) </dd> <dt class="text01">パスワード</dt> <dd> @Html.PasswordFor(m => m.Password, new { @class = "form-control" }) @Html.ValidationMessageFor(m => m.Password, "", new { @class = "text-danger" }) </dd> </dl> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <div class="checkbox"> @Html.CheckBoxFor(m => m.RememberMe) @Html.LabelFor(m => m.RememberMe) </div> </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="ログイン" class="btn btn-default" /> </div> </div> }

AccountController.cs

C#

// // 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.Email, model.Password, model.RememberMe, shouldLockout: false); 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); } }

補足情報

以上のことを試すに当たって、次のサイトを参考にしました。
(これを参考に、UserNameでのログインと、DBのAspNetUsersテーブルのUserNameにEmailアドレスではなくユーザー名の書き込みができるようになってから、安直なmodel等の編集を試みをしました)
Using User Name Instead of Email in ASP.NET Identity
https://www.codeproject.com/Articles/1052354/Using-User-Name-Instead-of-Email-in-ASP-NET-Identi

開発環境

VS2017
Windows7
.Net Framework 4.6.1
MVC5

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Razor

RazorはASP.NET Web PagesとASP.NET MVCで使われているビュー・エンジンです。HTMLマークアップとC#またはVisual Basicのコードに対応しています。マークアップとコードの間の切り替えは"@"で記されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。