OpenID を MVC3 Razor アプリケーションに統合しようとしています。OpenID は機能していますが、ロールのユーザーのメンバーシップをテストしようとすると、テストが失敗します。
2 つの役割:
「User」という名前の 1 人のユーザーを持つ「MainUser」。「Guest」という名前の 1 人のユーザーを持つ「GuestUser」。
Logon.cshtml のフォームは次のとおりです。
<form action="Authenticate?ReturnUrl=@HttpUtility.UrlEncode(Request.QueryString["ReturnUrl"])" method="post" id="openid_form">
<input type="hidden" name="action" value="verify" />
<div>
<fieldset>
<legend>Login using OpenID</legend>
<div class="openid_choice">
<p>
Please click your account provider:</p>
<div id="openid_btns">
</div>
</div>
<div id="openid_input_area">
@Html.TextBox("openid_identifier")
<input type="submit" value="Log On" />
</div>
<noscript>
<p>
OpenID is service that allows you to log-on to many different websites using a single
indentity. Find out <a href="http://openid.net/what/">more about OpenID</a> and
<a href="http://openid.net/get/">how to get an OpenID enabled account</a>.</p>
</noscript>
<div>
@if (Model != null)
{
if (String.IsNullOrEmpty(Model.UserName))
{
<div class="editor-label">
@Html.LabelFor(model => model.OpenID)
</div>
<div class="editor-field">
@Html.DisplayFor(model => model.OpenID)
</div>
<p class="button">
@Html.ActionLink("New User ,Register", "Register", new { OpenID = Model.OpenID })
</p>
}
else
{
//user exist
<p class="buttonGreen">
@Model.UserName,
@if (Roles.IsUserInRole("MainUser"))
{ <a href="@Url.Action("Index", "Main")">Welcome @Model.UserName, Continue... </a> }
@if (Roles.IsUserInRole("GuestUser"))
{ <a href="@Url.Action("Index", "Guest")">Welcome @Model.UserName, Continue... </a> }
<a href="@Url.Action("Index", "Main")">Role test failed for @Model.UserName </a>
</p>
}
}
</div>
</fieldset>
</div>
</form>
アプリを実行し、OpenId での認証に成功し、次を含む緑色のブロックを取得します: ユーザー、ユーザーのロール テストに失敗しました
これは、「ユーザー」としてのログオンが成功し、else コード ブロックに到達したが、IsUserInRole テストが失敗したことを示しています。
not 演算子を最初のテスト [ @if (!Roles.IsUserInRole("MainUser")) ] に追加すると、テストに合格します。
問題は、「ユーザー」が IsUserInRole テストに失敗する理由です。すべてのロールとユーザーのスペルが正しいこと、およびユーザーが適切なロールに属していることを 3 回確認しました。
どんな助けでも感謝します。