_[Authorize]
_で_FormsAuthentication.SetAuthCookie
_属性をテストするために、新しいASP.NET MVC 5プロジェクトを作成しました。 1つのアクションで(Homeコントローラーで)Cookieを設定するだけです。
_ public ActionResult About()
{
FormsAuthentication.SetAuthCookie("someUser", false);
_
そして、私は別のものへのアクセスを制限します:
_ [Authorize]
public ActionResult Contact()
{
_
Webページを起動して_/home/contact
_に移動すると、ログインページに正しくリダイレクトされます。次に、_/home/about
_に移動し、Cookieを取得して、連絡先ページに戻ります。しかし、私はまだログインページにリダイレクトされます-Cookieは私を認証/許可しません。
デバッガーで、Aboutページを複数回ロードすると_HttpContext.User.Identity.IsAuthenticated == false
_になります(つまり、認証Cookieを設定した後でも認証されているとは見なされません)。
ここで行う必要のある追加のステップはありますか?基本認証に独自のIPrincipalを設定する必要はありませんか?
web.configから削除:
<modules>
<!--<remove name="FormsAuthenticationModule" />-->
</modules>
または単純にweb.configの行を削除します
編集:MVC5がデフォルトでフォーム認証を削除したことを知らなかった(モジュールが削除された)ので、これらすべてに関連して元の投稿の下でDSRのコメントも確認してください。
Web.configを確認し、認証セクションを探します。次のようになります。
<authentication mode="Forms">
<forms loginUrl="..." cookieless="UseCookies" />
</authentication>
http://msdn.Microsoft.com/en-us/library/1d3t3c61%28v=vs.85%29.aspx
デフォルトのcookieless値は「UseDeviceProfile」です。これは、ブラウザーがcookieをサポートしていることを報告する場合はcookieが使用されることを意味します。
次に、ブラウザでCookieがオンになっていることを確認します。デバイス/ブラウザがCookieをサポートしていないか、Cookieがオフになっている場合、SetAuthCookieはURLを変更しますが、SetAuthCookieの呼び出し後にブラウザをリダイレクトする必要があります...
FormsAuthentication.RedirectFromLoginPage(String, Boolean)...
そのメソッドは、SetAuthCookieによる認証後にページを宛先にリダイレクトします。 RedirectFromLoginPageは、必要な属性をurlクエリに入れて、ポストバック全体でログインセッションを維持します。あちこちのサイトで独自のリダイレクトを行う場合、現在のユーザーがHttpContext.Current.User.Identity.IsAuthenticatedで認証されているかどうかをチェックすることにより、ポストバック全体でそのURLクエリパラメーターを維持する必要があります。
ユーザーをログインページに送信するには、使用する必要があります
FormsAuthentication.RedirectToLoginPage()
そのメソッドはreturnUrlパラメーターをクエリ文字列に追加し、後の関数「RedirectFromLoginPage」は認証後にリダイレクトされます。
パスおよびリソースへのweb.configのlocation要素を使用してユーザーまたはロールへのアクセスをブロックすると、認証されていないユーザーがアクセスを試みると、フォーム認証がログインページへのリダイレクトを自動的に処理します。
<location path="SomeFolderOnYourSite">
<system.web>
<authorization>
<deny users="?"/>
<allow roles="Administrators"/>
</authorization>
</system.web>
</location>
Formsタグのdomain
属性に誤った値を指定すると、これも発生する可能性があります。
<authentication mode="Forms">
<forms domain="localhost" ... />
</authentication>
<location path="SomeFolderOnYourSite">
<system.web>
<authorization>
<deny users="?"/>
<allow roles="Administrators"/>
</authorization>
</system.web>
少し変更して同じコードを使用しているときに機能していないようです_**<location path="~/SomeFolderOnYourSite"> <system.web> <authorization> <deny users="?"/> <allow roles="Administrators"/> </authorization> </system.web> </location>**