前提・実現したいこと
Visual Studio 2019でASP.Net Coreの3.1でWebアプリケーションを作っています。
認証の機能を後から入れたのですが、ログインに成功はしているのですが、その後ログインしている状態になっていないようです。
1.RazorでWeb アプリケーションを作成しました(認証なしで作成)
2.「新しいスキャフォールディングアイテムの追加」でIDを選び、全てのファイルをオーバーライドします。
3.ユーザークラスに「+」を押して「NInSample003User」を追加し、カスタムプロパティを追加できるようにしました。
(public class NInSample003User : IdentityUserというクラスになる)
4.マイグレーションとDBのアップデートを行いました。
5.実際に実行し、ユーザ登録を行うとDBにアカウント情報が入り、ログインも成功します。
(例えばパスワードを間違えるとエラーになる)
6.しかし、表示されるページは、ログインされた状態にはなっていないようです。
(SignInManager.IsSignedIn(User)でFalseに判断されてしまう)
発生している問題・エラーメッセージ
Page\Shared_LoginPartial.cshtml のファイルの
@using Microsoft.AspNetCore.Identity @using NInSample003.Areas.Identity.Data @inject SignInManager<NInSample003User> SignInManager @inject UserManager<NInSample003User> UserManager <ul class="navbar-nav"> @if (SignInManager.IsSignedIn(User)) //←ここで、Trueにならない { //ログインしている } else { //ログインしていない }
本来ならば、ログイン後は「User.Identity」の中にユーザ名など値が入るようなのですが、入っていないのが原因のようです。
※プロジェクトを「認証あり」で作成して、ステップ実行で動作を見たら、ログイン処理後にデータが入るというのは確認できました。
しかし、上記の方法で作成した場合は、中身が入らない状態です。
特に追加のコードが必要とは思えないのですが、何かコードの追加が必要なのでしょうか?
試したこと
・最初から認証ありで作成した場合は、Userに値が入り、画面もログイン状態の表示になる
・ユーザ登録をすると、DBにはテーブルも存在し、データも入っている。
・ログイン処理は、ステップ実行では「成功」と判断している。
補足情報
・そもそもは、ログインユーザに、一般/オーナー/管理者の区別をつけたい為に、その項目を追加しようとしています。
・ロールでも、実現できるかもしれませんが、それは大げさかと思っています。
・最初から認証ありでプロジェクトを作成した場合は、項目を追加できないという認識でいます。
(クラスを継承して項目を追加するのがセオリーと思っています)
以上、よろしくお願いします。
うまくいかなかった原因(改善方法)
回答者の協力により、下記の事で解決しました。
→ Startup.csの中にapp.UseAuthentication();
が足りていないという事がわかりました。
最初から認証を行う設定でプロジェクトを作成した場合は、自動で入るのですが、後で追加した場合は手入力する必要があるようです。
回答1件
あなたの回答
tips
プレビュー