폼 기반 응용 프로그램이 있습니다. 응용 프로그램은 로그인 컨트롤을 사용하여 생성 된 표준 ASP.Net 마법사입니다. 루트의 web.config
은 폼 기반 인증을 위해 순서대로 표시됩니다. <roleManager>
요소를 How To: Use Role Manager in ASP.NET 당 type="System.Web.Security.SqlRoleProvider"
(Windows 토큰 대신)을 사용하도록 변경해야했습니다.ASP.Net : 로그인 컨트롤, LoginUser_LoggedIn 및 역할 채우기
관리자, 엔지니어, 고객이라는 세 가지 역할을 설정했습니다. admin (관리자), eddie (엔지니어) 및 cathy (고객)의 세 사용자가 있습니다. ASP.Net Configuration Tool을 사용하여 사용자와 역할을 확인했습니다.
각 역할에는 디스크에 고유 한 디렉토리가 있으며 각 역할에는 고유 한 ASPX 파일 모음과 '방문 페이지'가 있습니다. 각 디렉토리에는 해당 역할에 대한 액세스를 제한하기 위해 web.config
이 있습니다. 예 :
<location path="~/Engineers">
<system.web>
<authorization>
<allow roles="Engineers" />
<deny users="*"/>
</authorization>
</system.web>
</location>
성공적으로 로그인하면 LoginUser_LoggedIn
을 연결하여 도착 URL을 작성합니다. 내가 겪고있는 문제는 로그인시 사용자의 역할이 채워지지 않아 좋은 리디렉션이 발생하지 않는다는 것입니다. 아래 코드에서 rolesArray
의 크기는 0입니다.
아이디어가 있으십니까? 다른 각도에서 접근해야합니까?
Private Sub LoginUser_LoggedIn(sender As Object, e As System.EventArgs) Handles LoginUser.LoggedIn
Try
Dim rolesArray() As String
rolesArray = Roles.GetRolesForUser()
Debug.Assert(rolesArray.Length > 0)
If (Roles.IsUserInRole("Administrators") = True) Then
LoginUser.DestinationPageUrl = "~/Administrators/Dashboard.aspx"
ElseIf (Roles.IsUserInRole("Engineers") = True) Then
LoginUser.DestinationPageUrl = "~/Engineers/Workspace.aspx"
ElseIf (Roles.IsUserInRole("Customers") = True) Then
LoginUser.DestinationPageUrl = "~/Customers/Dashboard.aspx"
Else
Debug.Assert(False)
End If
Catch ex As Exception
Debug.Print(ex.ToString)
End Try
End Sub
감사합니다. Brian. 나는 User.IsAuthenticated가 로그인 한 사용자에 대해 False라는 것을 알아 냈습니다. 적어도 말하기에 이상한. – jww
@noloader 초기화하지 않는 코드가 init 또는 그와 같은 시간에 발생하고로드 된 이벤트가로드 후 실행되고 응답을 처리하고 멤버를 확인하고 티켓을 작성한다고 생각할 때. 이것이 아마도 이유이며, 다음 번 다시 게시 할 때 사용할 수있는 이유 일 수 있습니다. –
늦게 답장을 드려 죄송합니다. 이제 성공적인 로그인은 사용자를'LoginSuccess.aspx'로 데려갑니다. 'LoginSuccess.aspx' 페이지에서'User._username'이 유효합니다. 불행히도,'User._roles'는 여전히 비어있어, 나의 역할 기반 리디렉션은 실패합니다. 'Roles.IsUserInRole'과'User.IsInRole' 둘 다 잘못된 정보를 제공합니다. 나는'User.IsRoleListCached'가 true라는 것을 알았고 (역할 공급자는'SqlRoleProvider'입니다.) 역할 목록을 강제로 업데이트 할 수있는 방법이 있습니까 (IntelliSense를 통해 볼 수 없었습니다)? – jww