前提
Blazor(サーバー)にて開発をしております。
こちらを参考に個別の認証テンプレートを用いて認証機能 ( [Authorize]属性 ) の実装を行うことが出来ました。
そこから発展してこちらを参考にしてロール承認の実装 ( [Authorize(Roles = "hoge")]属性 ) を行おうとしています。
発生している問題
ログインユーザに紐づくロール情報をDBに登録([AspNetUsers][AspNetUserRoles][AspNetRoles]それぞれのテーブルにレコード作成)して
ログイン後に [Authorize(Roles = "hoge")]属性を付与したページを表示すると認証されておらず、ページを表示出来ない状態です。
該当のソースコード
razor
1 2@page "/counter" 3@attribute [Authorize(Roles = "admin")] 4@*↑テンプレートからの変更箇所*@ 5<h1>Counter</h1> 6 7<p>Current count: @currentCount</p> 8 9<button class="btn btn-primary" @onclick="IncrementCount">Click me</button> 10 11@code { 12 private int currentCount = 0; 13 14 private void IncrementCount() 15 { 16 currentCount++; 17 } 18} 19
AspNetUsersテーブル(関係ありそうな列のみ抜粋)
Id | UserName | NormalizedUserName | ConcurrencyStamp |
---|---|---|---|
e113846d-a48e-44b6-8605-f9ff8d5080ff | hoge@hoge.com | HOGE@HOGE.COM | d6b208b7-6ee3-4b8b-87ea-79cae204ca84 |
AspNetUserRolesテーブル
UserId | RoleId |
---|---|
e113846d-a48e-44b6-8605-f9ff8d5080ff | admin |
AspNetRolesテーブル
Id | Name | NormalizedName | ConcurrencyStamp |
---|---|---|---|
admin | admin | admin | d6b208b7-6ee3-4b8b-87ea-79cae204ca84 |
試したこと
知識が乏しく原因の推察すら出来ていない状態です。
的外れなことを確認しているかとは思いますが、試したことは以下です。
①AspNetRolesテーブルのNormalizedNameを'admin'⇒'ADMIN'に変更
②AuthenticationStateProvider.GetAuthenticationStateAsync()を呼び出しAuthenticationStateを確認
⇒roleプロパティがあってそこがNullになってしまっているのかなと予想していたのですが、ロールに関係しそうなプロパティは無く、色々登録されているプロパティの中身を確認しても原因となっているものは見つけることが出来ませんでした。
追記
下記で調べてみたところFalseが返ってきており、ユーザとロールが紐づいていないようです。
紐づけを行う処理が別途必要なのでしょうか?
また、どのように行えばいいのでしょうか?
C#
1var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync(); 2var user = authState.User; 3 4Console.WriteLine(user.IsInRole("admin"));
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/21 06:18
2021/05/21 09:48