- PR -

フォーム認証で正しくリダイレクトされない

1
投稿者投稿内容
ojiboss
ベテラン
会議室デビュー日: 2008/02/06
投稿数: 52
投稿日時: 2008-02-06 18:07
VS2005、ASP.NET初心者です。よろしくお願いします。

フォーム認証のユーザー管理をデータベース・サーバで行うプログラムを
下記サイトを参考に組みましたが、ログイン後に再度ログイン画面が表示
され、正しくリダイレクトされません。

http://www.atmarkit.co.jp/fdotnet/dotnettips/147aspusrdb/aspusrdb.html

-------------------------------------------------------------------------------

LoginForm.aspx:

Protected Sub objBtn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles objBtn.Click

If (Page.IsValid = False) Then Exit Sub

'***************************************
' usertable(DB)を使用した認証ロジック
'***************************************
' 入力されたユーザーID、パスワードでusrテーブル内のレコードを検索
Dim objDb As New SqlConnection("Data Source=XXXX;Initial Catalog=XXXXDB;Integrated Security=True")
Dim objCom As New SqlCommand("SELECT * FROM usertable WHERE userid=@uid AND password=@passwd", objDb)
objCom.Parameters.AddWithValue("@uid", txtUsr.Text)
objCom.Parameters.AddWithValue("@passwd", FormsAuthentication.HashPasswordForStoringInConfigFile(txtPass.Text, "SHA1"))
objDb.Open()
Dim objDr As SqlDataReader = objCom.ExecuteReader()
If objDr.Read() Then
' 検索の結果、該当するレコードが存在した場合、認証は成功
FormsAuthentication.RedirectFromLoginPage(txtUsr.Text, False)
Else
objLbl.Text = "正しいユーザーID、パスワードを入力してください"
End If
objDb.Close()

--------------------------------------------------------------------------------

web.config:

<authentication mode="Forms">
<forms name=".KikanWeb" loginUrl="LoginForm.aspx" protection="All" timeout="30"/>
</authentication>

--------------------------------------------------------------------------------

最初のページにアクセスしたときのアドレスバーには下記のようにURLが表示されています。

http://XXXX/LoginForm.aspx?ReturnUrl=%2fauth%2fDefault.aspx

また、同じ現象をWEBで検索した結果下記のページが見つかり、参考にしてみましたが
解決できませんでした。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=2641&forum=7&2

正しくリダイレクトされない原因として考えられる要素がわかりません。
よろしくお願いします。

環境
OS Windows2003 server R2
IIS 6.0
VS2005
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2008-02-07 00:24
ステップ実行してみてください
FormsAuthentication.RedirectFromLoginPage(txtUsr.Text, False)
この行、通ってますか?通ってないなら単に該当ユーザがいないんでしょう。
パスワードはちゃんとSHA1で暗号化したものが格納されていますか?
ojiboss
ベテラン
会議室デビュー日: 2008/02/06
投稿数: 52
投稿日時: 2008-02-07 08:56
ステップ実行でしましたが、問題なく
FormsAuthentication.RedirectFromLoginPage(txtUsr.Text, False)のコード
を通っています。
パスワードもSHA1で暗号化したものが格納されています。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2008-02-07 10:26
authorization要素の設定はどうなってます?
ojiboss
ベテラン
会議室デビュー日: 2008/02/06
投稿数: 52
投稿日時: 2008-02-07 11:00
/auth 配下のweb.configでは
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
としています。
ojiboss
ベテラン
会議室デビュー日: 2008/02/06
投稿数: 52
投稿日時: 2008-02-07 13:39
自己解決しました。
原因は、ログインフォーム(LoginForm.aspx)の検証コントロールの検証スクリプトを
クライアント側で実行させないようにする為、ログインフォームの@Pageディレクティ
ブにClientTarget="downlevel"を追加していたのですが、これを削除すると正しくリダイレクトしました。
【参考URL】
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpqstart/html/cpsmpnetsamples-aspnetservercontrolformvalidation.asp

なぜ正しくリダイレクトしないのかは不明なので別スレッドをたててみます。
ベル様、どっとねっとふぁん様ありがとうございました。
1

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