2012-05-02 8 views
1

OpenIDをMVC3 Razorアプリケーションに統合しようとしています。 OpenIDは動作していますが、役割のユーザーのメンバーシップを試してみると、テストは失敗します。IsUserInRoleがtrueの状態にならない

二つの役割:「ユーザー」という名前のユーザーとの

「MainUser」。 「Guest」という名前の1人のユーザーを持つ「GuestUser」。

ここでは私のフォームは、私はアプリを実行し、成功したのOpenIDでの認証と含むグリーンブロックを取得し、私のLogon.cshtml

<form action="[email protected](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> 

にあります: ユーザー、ロールのテストはユーザー

に失敗しましたこれはAを示し成功したログオンを "ユーザー"とし、それをelseコードブロックに作成しましたが、IsUserInRoleテストが失敗しました。

最初のテスト[!if(!Roles.IsUserInRole( "MainUser"))]にnot演算子を追加すると、テストに合格します。

"User"がIsUserInRoleテストに失敗するのはなぜですか?私はすべての役割とユーザーのスペルが正しく、ユーザーが適切な役割を果たしていることを確認しました。

助けてください。

答えて

2

FormsIuthenticationをサポートしていないOpenIdのみを使用している場合、RoleProviderはロールの確認方法を知らない可能性があります。 Roles.IsUserInRoleメソッドは、現在アクティブなユーザーが要求された役割に属しているかどうかを確認するためにRoleProvider.IsUserInRoleに依存しています。 MSDNのマニュアルに従ってRoleProvider.IsUserInRoleの実際の戻り値は:

真指定されたユーザが設定 のapplicationNameのために指定されたロールである場合。それ以外の場合はfalseです。

こののapplicationNameは、web.configファイルで設定する必要があります。 RoleProviderを使用していない場合は、チェックが失敗し続ける理由があります。 RoleProviderを設定/のsystem.webに次のように定義されます。もちろん

<roleManager enabled="true" cacheRolesInCookie="true"> 
    <providers> 
     <clear /> 
     <add connectionStringName="YourDbConnectionString" 
      applicationName="MySampleAppName" 
      name="AspNetSqlRoleProvider" 
      type="System.Web.Security.SqlRoleProvider" /> 
    </providers> 
</roleManager> 

、これはあなたがASPNETDBデータベースに自分の役割を保存するために期待しています。しかし、あなた自身に適していない場合は、独自のRoleProviderを実装することができます。

+0

My が正しく設定されていて、アプリケーションの他の部分でIsUserInRoleを正常に使用しています。承認データベースがメインデータベースにマージされました。あなたの最初の文章が問題になるかもしれません。私はFormsAuthenticationを使用しません.OpenIdフォームは決してアクションに戻りませんが、Javaスクリプトを通して処理されます。私はIsUserInRole関数を実行する必要はないので、私は1つのログインしか持たないので、この時点では問題になっています。私はこれを答えとしてマークし、今後もっと見なければならないとコメントします。ありがとうございました – Joe

+0

My が正しく設定されており、アプリケーションの他の部分でIsUserInRoleを正常に使用しています。承認データベースがメインデータベースにマージされました。あなたの最初の文章は問題になるかもしれません。私はFormsAuthenticationを使用せず、OpenIdフォームは決してアクションにポストしませんが、Javaスクリプトを通して処理されます。私はIsUserInRole関数を実行する必要はないので、私は1つのログインしか持たないので、この時点では問題になっています。私はこれを答えとしてマークし、将来もっと見るべきであればコメントします。ありがとうございました – Joe

関連する問題