Avatar billede troublemaker Nybegynder
26. september 2005 - 08:25 Der er 18 kommentarer og
1 løsning

Database login med roles

Jeg har lavet en login side hvor jeg bruger database og logger brugeren ind med "FormsAuthentication.RedirectFromLoginPage()". Men hvordan kan man få den bruger som er logget ind til at blive medlem af en role som jeg selv sætter? Dette skal jeg bruge da jeg har to forskellige slags brugere, en Admin og en normal Bruger.

Sådan her ser min web.config ud:
<configuration>
  <system.web>
    <authentication mode="Forms">
      <forms name="loginaspnet" path="/" protection="All" loginUrl="Login.aspx" timeout="2">
      </forms>
    </authentication>
  </system.web>

  <location path="Admin">
    <system.web>
      <authorization>
        <allow users="Admin" />
        <deny users="?" />
      </authorization>
    </system.web>
  </location>
 
  <location path="Bruger">
    <system.web>
      <authorization>
        <allow roles="Bruger" />
        <deny users="?" />
      </authorization>
    </system.web>
  </location>
</configuration>
Avatar billede davidfossil Nybegynder
26. september 2005 - 10:01 #1
Avatar billede davidfossil Nybegynder
26. september 2005 - 10:04 #2
Du vil typisk skulle tilføje noget kode til Application_AuthenticateRequest() metoden i din Global.asax.cs/vb - i denne metode henter du rollerne op fra databasen og samler en IPrincipal som du smider efter brugeren. Kildekode eksempler findes i massevis i de artikler du finder på Google :)
Avatar billede troublemaker Nybegynder
26. september 2005 - 12:13 #3
ok jeg tror jeg har fået noget til at virke nu, men hvordan kan man lave autologon med det ?

jeg bruger denne her: http://www.xoc.net/works/tips/forms-authentication.asp
Avatar billede snepnet Nybegynder
26. september 2005 - 17:17 #4
du skifter false ud til true i denne her:

Response.Redirect(FormsAuthentication.GetRedirectUrl(txtUsername.Text, false));
så den bliver til
Response.Redirect(FormsAuthentication.GetRedirectUrl(txtUsername.Text, true));

det giver dig en persistant cookie istedet for en der udløber.

mvh
Avatar billede davidfossil Nybegynder
26. september 2005 - 20:20 #5
Hvis brugeren selv skal kunne vælge, smider du så bare en CheckBox ind i formularen.
Herefter er det bare at gøre som snepnet siger:

Response.Redirect(FormsAuthentication.GetRedirectUrl(txtUsername.Text, chkPersistant.Checked));
Avatar billede troublemaker Nybegynder
27. september 2005 - 07:57 #6
Kan man stadig gøre det der men hvor man selv bestemmer hvor den skal redirecte til?
Avatar billede troublemaker Nybegynder
27. september 2005 - 08:02 #7
heh glem det sidste der for det har jeg selv lige fundet ud af ;)
Avatar billede troublemaker Nybegynder
27. september 2005 - 08:31 #8
fix et svar og der er lidt points
Avatar billede troublemaker Nybegynder
27. september 2005 - 09:15 #9
Ville det ikke bare være nok at sætte "chkAutologin.Checked" til den "isPersistent As Boolean" der er i denne linje? Og så sætte "Expiration As Date" til så lang tid at cookien skal gemmes?

Dim fat As FormsAuthenticationTicket = New FormsAuthenticationTicket(1, txtUsername.Text, DateTime.Now, DateTime.Now.AddMinutes(30), chkAutologin.Checked, strRole, FormsAuthentication.FormsCookiePath)
Avatar billede troublemaker Nybegynder
27. september 2005 - 14:49 #10
Der er et problem med autologin.

Når jeg har sat den til at skulle logge ind automatisk og så lukker ned for hele browser vinduet. Når jeg så starter det igen og skriver adressen ind så går den bare til login side som om man slet ikke er logget ind. Jeg har prøvet at skrive hele adressen til den fil den skal gå til når man er logget ind men det virker heller ikke.
Avatar billede snepnet Nybegynder
28. september 2005 - 06:32 #11
kan du prøve at vise os den kode du er endt op med?
mvh
Avatar billede troublemaker Nybegynder
28. september 2005 - 07:46 #12
<script runat="server">
    Protected Sub btnLogin_Click(ByVal sender As Object, ByVal e As System.EventArgs)
        If ValidateUser(txtUsername.Text, txtPassword.Text) Then
            FormsAuthentication.Initialize()
            Dim strRole As String = AssignRoles(txtUsername.Text)

            Dim ExpDate As New Date
            If chkAutologin.Checked Then
                ExpDate = DateTime.Now.AddDays(30)
            Else
                ExpDate = DateTime.Now.AddMinutes(30)
            End If
           
            Dim fat As FormsAuthenticationTicket = New FormsAuthenticationTicket(1, _
              txtUsername.Text, DateTime.Now, ExpDate, chkAutologin.Checked, strRole, _
              FormsAuthentication.FormsCookiePath)
            Response.Cookies.Add(New HttpCookie(FormsAuthentication.FormsCookieName, _
              FormsAuthentication.Encrypt(fat)))
           
            'FormsAuthentication.GetRedirectUrl(txtUsername.Text, True)
           
            If strRole = "Admin" Then
                Response.Redirect("Admin\Default.aspx")
            Else
                Response.Redirect("Bruger\Default.aspx")
            End If
        Else
            lblError.Visible = True
        End If
    End Sub
   
    Private Function ValidateUser(ByVal strUsername As String, ByVal strPassword As String) As Boolean
        Return CBool(strUsername = "admin" Or strUsername = "bruger" AndAlso strPassword = "ko")
    End Function

    Private Function AssignRoles(ByVal strUsername As String) As String
        If txtUsername.Text = "admin" Then
            Return "Admin"
        ElseIf txtUsername.Text = "bruger" Then
            Return "Bruger"
        Else
            Return String.Empty
        End If
    End Function
   
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        If Not Page.IsPostBack Then
            If Request.QueryString("out") = "true" Then
                Session.Abandon()
                FormsAuthentication.SignOut()
            Else
                If Not (HttpContext.Current.User Is Nothing) Then
                    If HttpContext.Current.User.Identity.IsAuthenticated Then
                        Dim fi As FormsIdentity = CType(HttpContext.Current.User.Identity, FormsIdentity)
                        Dim fat As FormsAuthenticationTicket = fi.Ticket
                        Dim astrRoles As String() = fat.UserData.Split("|")

                        If astrRoles(0) = "Admin" Then
                            Response.Redirect("Admin\Default.aspx")
                        Else
                            Response.Redirect("Bruger\Default.aspx")
                        End If
                    End If
                End If
            End If
        End If
    End Sub
</script>
Avatar billede troublemaker Nybegynder
28. september 2005 - 07:48 #13
FormsAuthentication.GetRedirectUrl(txtUsername.Text, True)

Det skal lige siges at jeg har prøvet med den linje der men har sat den som kommentar fordi der ikke nogen forskel (så vidt jeg kan se) med den og den her

Dim fat As FormsAuthenticationTicket = New FormsAuthenticationTicket(1, _
txtUsername.Text, DateTime.Now, ExpDate, chkAutologin.Checked, strRole, _
FormsAuthentication.FormsCookiePath)
Avatar billede troublemaker Nybegynder
29. september 2005 - 09:09 #14
Nogen ide hvorfor det ikke virker snepnet?
Avatar billede snepnet Nybegynder
29. september 2005 - 23:15 #15
undskyld min responstid - jeg er ikke hjemme - og det bliver muligvis først imorgen sen aften (som så er tidlig morgen for dig) at jeg kan kigge nærmere på det.
men kan du ikke prøve at debugge igennem det, og se hvor det knækker?
mvh
Avatar billede troublemaker Nybegynder
30. september 2005 - 11:53 #16
Jeg tror jeg har fundet ud af hvad fejlen er men jeg kan ikke få den rettet.

Det er fordi at cookien bliver slettet når min browser bliver lukket.

Sådan er det ved både Firefox og IE.
Avatar billede troublemaker Nybegynder
30. september 2005 - 12:44 #17
Nå nu har jeg fået det til at virke. lavet bare om på

den her

Response.Cookies.Add(New HttpCookie(FormsAuthentication.FormsCookieName, _
  FormsAuthentication.Encrypt(fat)))

til den her

Dim AuthCookie As New HttpCookie(FormsAuthentication.FormsCookieName)
AuthCookie.Expires = ExpDate
AuthCookie.Value = FormsAuthentication.Encrypt(fat)
AuthCookie.Path = FormsAuthentication.FormsCookiePath
Response.Cookies.Add(AuthCookie)

Så det med persistent cookie virker ikke ;(
Avatar billede troublemaker Nybegynder
30. september 2005 - 12:44 #18
Så venter jeg bare på et svar fra jer to.. så i kan få points og jeg kan lukke spm ;)
Avatar billede davidfossil Nybegynder
30. september 2005 - 14:48 #19
.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester