none
LoginStatusコントロールでloginUrlが反映されない RRS feed

  • 質問

  • お世話になります。

    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 の値が反映されるものとの認識なのですが、これが反映されない原因など

    ご存知の方いらっしゃるでしょうか。

    よろしくお願いします。


    2012年3月13日 5:12

回答

  • 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
    2012年3月15日 11:02
  • ソリューションエクスプローラーの [新しい項目の追加] メニュー
    で [ヘルパー(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
    2012年3月15日 14:30

すべての返信

  • > しばらくうまく動作していたのですが、途中自分で何をやったのか、

    ご自分でも何をしたのか分らないということですと、掲示板に書いて
    あること以外は質問者側の状況を知りえない回答者には、ますます分
    らないです。

    想像できるのは、URL Rewrite モジュールとか URL Routing モジュ
    ールとかを入れたのではないかというようなことぐらいです。

    Fiddler などのツールを使って、ブラウザとサーバーとのやり取りを
    見てください。

    ログインしていない状態で LoginStatus をクリックすると JavaScript
    が起動してポストバックがかかり、サーバーからリダイレクト指示
    (HTTP/1.1 302 Found)が返ってくるはずです。その応答ヘッダーに
    含まれる Location(リダイレクト先)は web.config で指定されたロ
    グインページになるはずです。

    それが期待通り hoge/Login.aspx で、ブラウザがそれを GET に行って
    いれば、問題はその後発生していることになります。

    2012年3月13日 12:27
  • 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が反映されない簡単なパターンがあるわけでは無いことがわかりました。

    ご回答ありがとうございました。


    2012年3月14日 4:46
  • 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
    2012年3月15日 11:02
  • ソリューションエクスプローラーの [新しい項目の追加] メニュー
    で [ヘルパー(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
    2012年3月15日 14:30
  • TH01さん

    ありがとうございます!

    無事、問題が解決しました。

    大変勉強になりました。

    ASP.NET をやり始めたばかりでわからない事ばかりなので

    一つずつ学んでいきたいと思います。

    ありがとうございました。


    2012年3月16日 3:18
  • SurferOnWwwさん

    ご回答ありがとうございます。

    <add key="webpages:Enabled" value="true" />

    これを意図的に作った覚えはないですが、Webページ(Razor)なら作成しました。

    まだまだASP.NETの事をわかっておらず、Razorってなんだろうという興味で追加しました。

    追加してからネットで検索かけてみたりしていました。

    ただ、新しいWebサイトを作成してヘルパー(Razor)の追加などを行なっても再現できず、

    確認とれていないのですが、ご指摘いただいたRazorの関連だと思います。

    大変参考になりました。

    原因もほぼ正解だと思うので今後も役に立ちます。

    ありがとうございました。


    2012年3月16日 3:30