トップ回答者
LoginStatusコントロールでloginUrlが反映されない

質問
-
お世話になります。
VWD2010 ExpressEditionで開発しています。
LoginStatusコントロールを配置し、
ルートのweb.configで loginUrl を設定してログイン画面にリダイレクトするように設定しています。
web.config 抜粋
<!--ログイン認証--> <authentication mode="Forms"> <forms loginUrl="hoge/Login.aspx" defaultUrl="Default.aspx" /> </authentication>
これで LoginStatusコントロール に未ログインの時は 「ログイン」とテキストで表示され
クリックすると hoge/Login.aspx のページが表示され
しばらくうまく動作していたのですが、途中自分で何をやったのか、
どうやっても ほにゃらら/Account/Login (Login.aspxではない) へアクセスしようとするようになってしまいました。
LoginStatusコントロールを新しく別のページに作成してログインをしようとしても上記のアドレスにアクセスしてしまいます。
ソリューション全体をAccountで検索をかけてもひっかかりません。
Webサイトの作成時に「空の~」で作成開始したのでそもそもAccountフォルダがありません。
Accountフォルダを作成し、拡張子もない Login ファイルを置いてやるとアクセスには成功します。
http://support.microsoft.com/kb/313116/ja
上記のページを見たりもしたのですが問題解決しませんでした。
どこの設定を見て ~/Account/Login へアクセスするのかわからず、困ってしまっています。
web.configで loginUrl の値が反映されるものとの認識なのですが、これが反映されない原因など
ご存知の方いらっしゃるでしょうか。
よろしくお願いします。
f
回答
-
webpages が有効な場合、authentication での loginUrl の指定は無視されるそうです。
この場合は次のように指定すればいいみたいです。<appSettings>
<add key="webpages:Enabled" value="true" />
<add key="loginUrl" value="~/hoge/Login.aspx" />
</appSettings>"loginUrl Account" で検索して次のサイトを見つけました。
無聊を託つ:WebMatrixの認証設定とヘルパー
http://takepara.blogspot.com/2011/01/webmatrix_14.html
- 回答としてマーク でぃあい 2012年3月16日 3:06
-
ソリューションエクスプローラーの [新しい項目の追加] メニュー
で [ヘルパー(Razor)] を追加すると、Web.config に、<add key="webpages:Enabled" value="true" />
が自動生成され、リダイレクト先が /Account/Login になるという
問題が再現できました。同じような問題に悩んだ(?)人がいるようです。この方は意図的に
<add key="webpages:Enabled" value="true" /> を追加したようです
が。ASP.NET Web Pages and FormAuthentication.LoginUrl configuration
http://igorzelmanovich.blogspot.com/2011/07/aspnet-web-pages-and.html個人的には、バグではないかと思っています。
- 編集済み SurferOnWww 2012年3月15日 14:31 誤記訂正
- 回答としてマーク でぃあい 2012年3月16日 3:06
すべての返信
-
> しばらくうまく動作していたのですが、途中自分で何をやったのか、
ご自分でも何をしたのか分らないということですと、掲示板に書いて
あること以外は質問者側の状況を知りえない回答者には、ますます分
らないです。想像できるのは、URL Rewrite モジュールとか URL Routing モジュ
ールとかを入れたのではないかというようなことぐらいです。Fiddler などのツールを使って、ブラウザとサーバーとのやり取りを
見てください。ログインしていない状態で LoginStatus をクリックすると JavaScript
が起動してポストバックがかかり、サーバーからリダイレクト指示
(HTTP/1.1 302 Found)が返ってくるはずです。その応答ヘッダーに
含まれる Location(リダイレクト先)は web.config で指定されたロ
グインページになるはずです。それが期待通り hoge/Login.aspx で、ブラウザがそれを GET に行って
いれば、問題はその後発生していることになります。 -
SurferOnWwwさん
ご回答ありがとうございます。
早速、教えて頂いた Fiddler をインストールして結果を見てみたところ、
HTTP/1.1 302 Found の Locationで既に
~Account/Login を要求していました。
サーバーはVSの開発サーバーで
開発中のPCで簡易的に動作させてこのような動作になります。
web.config の他の部分で設定しているメール送信の設定は生きていて
プログラムの実行中に正常にメール送信してくれるので web.config自体はちゃんと読み込めているはずなのですが
loginUrlは無視されてしまいます。
ご指摘の URL Rewrite などのモジュールを入れるような作業はしていません。
<configuration> <system.web> <roleManager enabled="true" /> <compilation debug="true" targetFramework="4.0"/> <!--ログイン認証--> <authentication mode="Forms"> <forms loginUrl="hoge/Login.aspx" defaultUrl="Default.aspx" /> </authentication> <!--メンバーシップ--> <membership> <providers> <remove name="AspNetSqlMembershipProvider" /> <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="LocalSqlServer" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="true" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="8" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/> </providers> </membership> </system.web> <system.net> <!--送信元メール--> <mailSettings> メールの設定 </mailSettings> </system.net> <appSettings> <add key="webpages:Enabled" value="true" /> </appSettings> </configuration>
loginUrlが反映されない簡単なパターンがあるわけでは無いことがわかりました。
ご回答ありがとうございました。
f
-
webpages が有効な場合、authentication での loginUrl の指定は無視されるそうです。
この場合は次のように指定すればいいみたいです。<appSettings>
<add key="webpages:Enabled" value="true" />
<add key="loginUrl" value="~/hoge/Login.aspx" />
</appSettings>"loginUrl Account" で検索して次のサイトを見つけました。
無聊を託つ:WebMatrixの認証設定とヘルパー
http://takepara.blogspot.com/2011/01/webmatrix_14.html
- 回答としてマーク でぃあい 2012年3月16日 3:06
-
ソリューションエクスプローラーの [新しい項目の追加] メニュー
で [ヘルパー(Razor)] を追加すると、Web.config に、<add key="webpages:Enabled" value="true" />
が自動生成され、リダイレクト先が /Account/Login になるという
問題が再現できました。同じような問題に悩んだ(?)人がいるようです。この方は意図的に
<add key="webpages:Enabled" value="true" /> を追加したようです
が。ASP.NET Web Pages and FormAuthentication.LoginUrl configuration
http://igorzelmanovich.blogspot.com/2011/07/aspnet-web-pages-and.html個人的には、バグではないかと思っています。
- 編集済み SurferOnWww 2012年3月15日 14:31 誤記訂正
- 回答としてマーク でぃあい 2012年3月16日 3:06
-
SurferOnWwwさん
ご回答ありがとうございます。
<add key="webpages:Enabled" value="true" />
これを意図的に作った覚えはないですが、Webページ(Razor)なら作成しました。
まだまだASP.NETの事をわかっておらず、Razorってなんだろうという興味で追加しました。
追加してからネットで検索かけてみたりしていました。
ただ、新しいWebサイトを作成してヘルパー(Razor)の追加などを行なっても再現できず、
確認とれていないのですが、ご指摘いただいたRazorの関連だと思います。
大変参考になりました。
原因もほぼ正解だと思うので今後も役に立ちます。
ありがとうございました。
f