これについてはすでにいくつかの質問があることは知っていますが、私の問題を解決するものはないようです。
VB.NET webForms アプリをデバッグしていますが、(非永続的な Cookie を使用して) FormsAuthentication.SetAuthCookie を動作させることができません。ウォッチウィンドウで確認すると、HttpContext.Current.Userオブジェクトを作成しているように見えますが、オブジェクトは作成されているようですが、「Identity」プロパティは作成されていません。
ブラウザが Cookie をサポートしているかどうかなど、基本的なことをチェックした SO の投稿をたくさん読んだことがあります。比較的言えば、うまく機能します。これが例外をスローする場所は、それを取得するはずの BLL コードから呼び出された場所です。
FormsAuthentication メソッドを呼び出すコードは次のとおりです...:
'When participant logs in having already created records in DB.
Protected Sub btnGo_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles btnGo.Click
If Me.txtUsername.Text.Trim.Length <> 0 AndAlso Me.txtPassword.Text.Trim.Length <> 0 Then
If Membership.ValidateUser(Me.txtUsername.Text, Me.txtPassword.Text) Then
FormsAuthentication.SetAuthCookie(Me.txtUsername.Text, False)
'This is where we run into trouble; the property checks with the forms auth...
MyBLL.Common.CurrentUser = New MyBLL.User(Me.txtUsername.Text)
'set site property..
If Site_ IsNot Nothing Then
MyBLL.Common.CurrentUser.Site = Me.Site_
End If
MyBLL.Common.CurrentParticpant = Nothing
MyBLL.Common.CurrentParticpantVisitID = -1
Response.Redirect("~/Apps/Dashboard.aspx", True)
Else
Me.lblLoginMsg.Visible = True
End If
Else
Me.lblLoginMsg.Visible = True
End If
End Sub
BLLオブジェクトのコードは次のとおりです(HttpContextからユーザーを呼び出す共有プロパティがあります...)
Public Shared Property CurrentUser() As MyBLL.User
Get
Dim objUser As MyBLL.User
If Not IsNothing(HttpContext.Current.Session("currentSiteUser")) Then
objUser = CType(HttpContext.Current.Session("currentSiteUser"), MyBLL.User)
If objUser.Username <> HttpContext.Current.User.Identity.Name Then
objUser = New MyBLL.User(HttpContext.Current.User.Identity.Name)
HttpContext.Current.Session("currentSiteUser") = objUser
End If
Else
objUser = New MyBLL.User(HttpContext.Current.User.Identity.Name)
HttpContext.Current.Session("currentSiteUser") = objUser
End If
Return objUser
End Get
Set(ByVal value As MyBLL.User)
'_CurrentUser = value
HttpContext.Current.Session("currentSiteUser") = value
End Set
End Property
これが私の webConfig の Forms 要素です。ここではすべてがうまくいっているように思えます...
<authentication mode="Forms">
<forms loginUrl="~/Public/Default2.aspx" defaultUrl="~/Public/Default2.aspx" timeout="60"/>
</authentication>