35 messaggi dal 04 gennaio 2008
Ciao a tutti,

ho da poco installato Visual Studio 2008 che, nei miei programmi dovrà rimpiazzare il 2005 a breve.
Per iniziare ho provato a convertire via wizard un progetto asp.net realizzato con vs2005 per iniziare a gestirlo con vs2008.
La conversione è andata a buon fine e tutto sembrava funzionare bene (a parte qualche problemino con le variabili di sessione).
MA...per accedere a questa applicazione è necessario effettuare il login.
Ho creato due sezioni nel sito, una di amministrazione e una "utente". Di conseguenza sono stati creati due gruppi di utenti: gli amministratori che possono vedere entrambe le sezioni, e gli "users" che possono vedere solo la parte "utente".
Le due sezioni sono contenute in due cartelle distinte e per garantire quanto detto qui sopra ho creato due web.config, uno per ognuna delle sezioni.
Tutto funzionava benissimo fino a quando non ho convertito il progetto in VS2008. Adesso accade che l'utente effettua il login ma non risulta mai autenticato.
Mi spiego meglio: se l'utente sbaglia password il sistema glielo segnala e lo fa procedere solo nel caso in cui username e pwd siano corretti. Quando però accede alle altre pagine Context.User.Identity.Name è blank e Context.User.Identity.IsAuthenticated è false.

Web.Config per la parte (folder) admin:
<authorization>
   <allow roles="administrators"/>
   <deny users="*" />
</authorization>


Web.Config per la parte (folder) users:
<authorization>
   <allow roles="administrators,users"/>
   <deny users="*" />
</authorization>


Mentre il web.config contenuto nella root del sito, dove c'è la pagina di Login contiene:
<authentication mode="Forms">
    <forms name="myform" loginUrl="login.aspx" protection="All" timeout="20" defaultUrl="common/default.aspx"/>
</authentication>


Nel global.asax ho messo scritto questo:
    Sub Application_AuthenticateRequest(ByVal s As Object, ByVal e As EventArgs)
        If Request.IsAuthenticated Then
            Dim sName As String = User.Identity.Name
            Dim sRole As String = sName.Substring(sName.LastIndexOf("|") + 1)
            Dim sGrpArr() As String = {sRole}
            Dim oIdentity As GenericIdentity = New GenericIdentity(sName)
            Context.User = New GenericPrincipal(oIdentity, sGrpArr)
        End If
    End Sub


(Un esempio di stringa sName per è "admin|1|administrators")

Mentre nella pagina di login c'è questo codice
    Try
      Dim sUserNameRole = CheckCredentials(txtBoxUserName.Text, txtBoxPwd.Text)
      If (sUserNameRole <> "") Then
        FormsAuthentication.RedirectFromLoginPage(sUserNameRole, False)
      Else
        Msg.Text = "Nome utente o password non corretti. Riprovare"
      End If
    Catch ex As Exception
      Msg.Text = "Si è verificato un errore nella fase di connessione al database: " & ex.Message
    End Try

Subito dopo la RedirectFromLoginPage Context.User.Identity.IsAuthenticated è false.
Tra l'altro se non ricordo male, lo spunto per la gestione degli utenti l'avevo preso proprio da uno degli esempi presenti sul sito...
Grazie.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.