@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

HTMLからログインさせたい

投稿者投稿内容
未記入
ベテラン
会議室デビュー日: 2008/01/15
投稿数: 65
投稿日時: 2008-01-17 18:25
こんにちは。
初歩的な質問ですみません。
VS2005のWEBサイトについて教えてください。

良くある作りだと思いますが、マスターページにloginviewコントロールで
ログインボックスを作成し、いつでもログインボックス(ログイン済みで
あればユーザー名)が見れるようにしています。
当然コンテンツのファイル名はXXX.aspxとなっています。

これとは別に、入り口用のHTMLソース(ログインボックス有り)を書いて、
Apacheサーバーに置き、POSTでXXX.aspxにID/PASSWORDを渡したいのですが
HTML側のFORMはどのようなソースになれば良いのでしょうか?
認証自体は.NET側にやらせるので、エラーはXXX.aspxに出力します。

このようなパターンの説明を見つけることができなかったので
よろしくお願いします。


shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2008-01-17 19:15
単純にHTMLの話(POST先がASPになるだけ)でいいんですよね?

http://www.tagindex.com/html_tag/form/

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-01-17 19:18
aspx の ViewState をオフにして、apache 側では aspx と同じ ID のコントロールをつくり、aspx に対して submit してやれば、いけませんかね?
未記入
ベテラン
会議室デビュー日: 2008/01/15
投稿数: 65
投稿日時: 2008-01-17 19:35
引用:

Jittaさんの書き込み (2008-01-17 19:18) より:
aspx の ViewState をオフにして、apache 側では aspx と同じ ID のコントロールをつくり、aspx に対して submit してやれば、いけませんかね?



<asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">ユーザー名:</asp:Label>
<asp:TextBox ID="UserName" runat="server"></asp:TextBox>
<asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">パスワード:</asp:Label>
<asp:TextBox ID="Password" runat="server" TextMode="Password"></asp:TextBox>

となっていたので

<form method="POST" action="http://XXX/hoge/">
ユーザー名<input id="UserName" type="text" /><br />
パスワード<input id="Password" type="password" />
<input id="Submit1" type="submit" value="ログイン" />
</form>
と書いたのですが、飛んだ先で未ログインの状態(ログインボックスが表示)でした。

http://XXX/hoge/の法ではDefault.aspxがログイン済みで表示されることを期待しています。

試しに認証が必要なページ(保護されたページ)をフルパスで記入したところASP.NET側のログインページに飛ばされましたのでこの書き方では認証はされていないと思います。

名前の対応付けが間違っているのでしょうか?

未記入
ベテラン
会議室デビュー日: 2008/01/15
投稿数: 65
投稿日時: 2008-01-17 19:39
<form method="POST" action="http://XXXX/hoge/clients/ClientTop.aspx">
ユーザー名<input id="UserName" name="UserName" type="text" /><br />
パスワード<input id="Password" name="Password" type="password" />
<br />
<input id="Submit1" type="submit" value="ログイン" />
</form>
も同じでした。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-01-17 21:44
エラーではなく、一応、ページが表示されたということですか?

ブレークポイントを張って、デバッグしてみましたか?
ページの ViewState は、使わない設定になっていますよね?


追記
 「エラーではない」と確認するのは、POST に対しては ViewState から以前の状態を再現しようとし、再現できないときは例外が発生するからです。そのため、もう一度、「ページの ViewState は、使わない設定になっていますよね?」と、確認しています。ご返答には、そのあたりのことが書かれていないためです。

 ブレークポイントを張って云々は、本当にページの処理がされているか確認するためです。他所からの POST が、IIS やワーカープロセスによって阻止されていれば、他のところを疑わなければなりません。


さらに追記
 form 要素にも ID 属性がありませんか?それも合わせてくださいね。
 それから、ログインのための aspx に対して submit しないと、意味がないですよ。

[ メッセージ編集済み 編集者: Jitta 編集日時 2008-01-17 22:07 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-01-19 21:45
ああ、ごめんなさい、勘違いしていました。
引用:

未記入さんの書き込み (2008-01-17 18:25) より:

良くある作りだと思いますが、マスターページにloginviewコントロールで
ログインボックスを作成し、いつでもログインボックス(ログイン済みで
あればユーザー名)が見れるようにしています。


 よくある作りではないと思います。
 よくあるのは、「ログインしている場合、そのユーザ名を表示する」であって、「どのページでもログインできる」ではないと思います。一度ログインすると、cookie に「このユーザでログインした」情報を保存しておき、全てのページでその名前を表示する。同時に「**さんではない場合、ログインし直してください」も表示しておき、それをクリックするとログイン専用のページに移動するのであれば、よくあると思います。

 どうして「action="http://XXX/hoge/"」や「action="http://XXXX/hoge/clients/ClientTop.aspx"」(ログインしなければ見えないページと判断)が出てくるのだろうと思ったら、マスターページでログインさせようとしていたのですね。まぁ、その場合でも、同じようにできるのではないかと思います。データがポストされるところにポストしてやること。それだけです。
未記入
ベテラン
会議室デビュー日: 2008/01/15
投稿数: 65
投稿日時: 2008-01-21 11:21
返事を書くために指摘事項を調べたり試したりしていた為、返事が遅くなり申し訳ありません。

引用:

エラーではなく、一応、ページが表示されたということですか?
ブレークポイントを張って、デバッグしてみましたか?



ページは表示されました。
デバッグでは表示したいページのpage_loadに来る前に、web.configに定義したログインページ(FORM認証)に遷移してしまいます。


引用:

ページの ViewState は、使わない設定になっていますよね?


できていません。
個別のコントロールのViewStateはEnableViewStateをfalseにしたのですが、ページのViewStateをOFFにする方法が判りません。
実行時のソースをみると、__VIEWSTATEの項目がありましたので、このせいでログインが成功しないのだと思います。


引用:

 よくある作りではないと思います。
 よくあるのは、「ログインしている場合、そのユーザ名を表示する」であって、「どのページでもログインできる」ではないと思います。一度ログインすると、cookie に「このユーザでログインした」情報を保存しておき、全てのページでその名前を表示する。同時に「**さんではない場合、ログインし直してください」も表示しておき、それをクリックするとログイン専用のページに移動するのであれば、よくあると思います。

 どうして「action="http://XXX/hoge/"」や「action="http://XXXX/hoge/clients/ClientTop.aspx"」(ログインしなければ見えないページと判断)が出てくるのだろうと思ったら、マスターページでログインさせようとしていたのですね。まぁ、その場合でも、同じようにできるのではないかと思います。データがポストされるところにポストしてやること。それだけです。



「取り敢えず使ってもらって、気に入ったらそこからログインしてもらう」という風にしたかったのでどこでもログインできるようにしました。
よくある作りでは無いということは判りましたが、仕様的に今のままでやりたいので、マスターページでログインさせる方法を実現したいと思います。


ご指摘で実現できていない、ViewStateをオフにする方法を教えて頂けないでしょうか?

スキルアップ/キャリアアップ(JOB@IT)