我正在尝试将 OpenID 集成到我的 MVC3 Razor 应用程序中。OpenID 正在工作,但是当我尝试测试用户在角色中的成员资格时,测试失败。
两个角色:
“MainUser”和一个名为“User”的用户。“GuestUser”和一个名为“Guest”的用户。
这是我的 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 测试。我已经三重检查了我所有的角色和用户拼写是否正确,并且用户的角色是正确的。
任何帮助表示赞赏。