Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it L'avatar di _J_
    Registrato dal
    Apr 2007
    Messaggi
    218

    controllo login e aspnetdb.mdf

    salve ragazzi,
    ho l'esigenza di recuperare dopo un login il cognome e nome del possessore di un certo username e password inseriti nel login stesso, ma se uso il controllo login del framework (sono obbligato ad usarlo) le informazioni le trovo inserite in un database aspnetdb.mdf...

    vorrei sapere se posso cambiare database per il controllo login... immagino che modificarlo creerebbe dei problemi...

    grazie a chi risponderà!

  2. #2
    Devi crearti un Custom Membership Provider e siccome vuoi anche un dato che nella tabella del login non esiste
    puoi fare due cose, o usi un tuo db strutturato come ti pare, oppure utilizzi la profilazione
    ovvero aggingi anche dati che interessano e che vengono salvati in apposite tabelle.
    Se segui la seconda strada puoi anche tenere il db di default microsoft

  3. #3
    Utente di HTML.it L'avatar di _J_
    Registrato dal
    Apr 2007
    Messaggi
    218
    sì, ho letto qulacosa a riguardo su internet... il problema è che non mi è tanto chiara la logica, visto che non ho mai sentito parlare di membership o provider per il login...

    se ti è possibile, potresti spiegarmi un attimino la logica che sta dietro queste cose?

    non ti chiedo di postarmi codice, ma semplicemente di farmi capire i passi che devo seguire, visto che non ho trovato nulla di simile in internet (in un certo senso vorrei l'algoritmo per implementare il membership, perchè voglio imparare come si fa)

    comunque ti ringrazio tantissimo per l'interessamento!

  4. #4
    Cerco di spiegartelo al meglio per come l'ho capito io, e tieni presente che non è da molto che
    sto cercando di imparare ASP.NET

    La microsoft ha implementato nel framerwork 2.0 per ASP.NET degli oggetti per facilitare
    la creazione e la gestione degli utenti, vedi i vari Login, LoginView, LoginStatus ecc.

    Tali oggetti fanno riferimento nella parte Data ad un db MS SqlServer specificamente strutturato.
    Le classi che gestiscono questo prendono il nome di Membership Provider

    Ovviamente c'è la possibilità di modificare tale comportamento, continuando ad utilizzare
    cosi gli oggetti Login, LoginView ecc.. ma andando a prelevare e confrontare
    i dati non dal db e dalle tabelle microsoft, ma da tabelle nostre proprie, ad esempio
    se qualcuno potesse usare solo un db Access sul proprio sito
    dovrebbe modificare tale classi.

    Ora quello che vuoi fare tu è ottenere informazioni che sulla tabella pensata da microsoft
    non ci stanno.
    Però non è che sono scemi, hanno anche pensato che uno potrebbe volere informazioni
    aggiuntive su un utente, al dilà dello user e password.
    Quindi hanno fatto anche altre tabelle apposite per salvarci dati come Nome, cognome ...
    e quelle puoi usare per salvarti i dati che ti interessano.

    Solo che io non so che tipo di db e che tabelle tu abbia nel tuo sito, se hai un db
    ad esempio oracle, o access, oppure semplicemente le tue tabelle differiscono per nome
    devi customizzarti il procedimento, che si chiama appunto Profile Providers

    Come scritto nelle prime righe del link che ti ho postato:
    Profile providers provide the interface between ASP.NET's profile service and profile data sources. The two most common reasons for writing a custom profile provider are:

    * You wish to store profile data in a data source that is not supported by the profile providers included with the .NET Framework, such as an Oracle database.
    * You wish to store profile data in a SQL Server database whose schema differs from that of the database used by System.Web.Profile.SqlProfileProvider.
    Lo so che non è certo una chiara spiegazione, ma l'argomento è complesso ed io sono solo
    all'inizio e non l'ho capito bene nemmeno io

    Cmq ste cose van studiate e applicate, sul forum si può dare solo un indicazione.

    Aggiungo che nel mio caso ho usato il primo link che ti ho postato perche avevo
    un db access con utenti e password che avevo creato quando usavo asp, e volevo
    continuare ad usare quello, quindi ho dovuto modificare il Membership provider cosi da
    prelevare user e pass dal mio db e contemporaneamente usare gli oggetti del .NET 2.0
    quali loginview, loginStatus ecc...

  5. #5
    Utente di HTML.it L'avatar di _J_
    Registrato dal
    Apr 2007
    Messaggi
    218
    ciao!

    sono solo all'inizio e non l'ho capito bene nemmeno io
    è già tanto che mi hai spiegato la situazione (niente male per uno che dice di non averci capito molto bene :quote: ) e per questo ti ringrazio tanto

    cmq per curiosità io uso sqlserver, e sto realizzando un'anagrafe che prevede un login, il cui username e la password sono forniti dal Comune stesso previa richiesta mediante mail
    l'username è del tipo 'cognome nome', la password è alfanumerica..

    quindi ho necessità di usare un provider diverso da quello di default perchè ovviamente non ha senso la domanda e risposta per ricordare l'username scelto, visto che come user si ha nome e cognome...

    vorrei solo eliminare quei due campi dal createuserwizard, per quel che riguarda l'user posso sempre gestirlo via codice...

  6. #6
    Se hai dato una letta ai link che ti ho postato avrai notato come sia possibile customizzare
    il comportamento degli oggetti esistenti in ASP.NET 2.0, semplicemente implementandosi
    i metodi specifici del Membership Provider

    Sempre pensando a quello che ho fatto io, in App_Code ho inserito un mio prodiver
    chiamato MioSitoMembershipProvider che eredita da Membership Provider e nel momento
    in cui ho scritto che eredita dalla classe base mi ha spiattellato sotto tutti i metodi customizzabili:

    Codice PHP:
    Public Class MioSitoMembershipProvider
        Inherits MembershipProvider

        
    '---for database access use---
        Private connStr As String
        Private comm As New OleDb.OleDbCommand

        Private _requiresQuestionAndAnswer As Boolean
        Private _minRequiredPasswordLength As Integer

        Public Overrides Sub Initialize(ByVal name As String, ByVal config As _
            System.Collections.Specialized.NameValueCollection)

            '
    ===retrives the attribute values set in 
            
    'web.config and assign to local variables===

            If config("requiresQuestionAndAnswer") = "true" Then _
                _requiresQuestionAndAnswer = True

            connStr = config("connectionString")
            MyBase.Initialize(name, config)
        End Sub

        Public Overrides Property ApplicationName() As String
            Get

            End Get
            Set(ByVal value As String)

            End Set
        End Property

        Public Overrides Function ChangePassword(ByVal username As String, ByVal oldPassword As String, ByVal newPassword As String) As Boolean

        End Function

        Public Overrides Function ChangePasswordQuestionAndAnswer(ByVal username As String, ByVal password As String, ByVal newPasswordQuestion As String, ByVal newPasswordAnswer As String) As Boolean

        End Function

        Public Overrides Function CreateUser(ByVal username As String, ByVal password As String, ByVal email As String, ByVal passwordQuestion As String, ByVal passwordAnswer As String, ByVal isApproved As Boolean, ByVal providerUserKey As Object, ByRef status As System.Web.Security.MembershipCreateStatus) As System.Web.Security.MembershipUser

        End Function

        Public Overrides Function DeleteUser(ByVal username As String, ByVal deleteAllRelatedData As Boolean) As Boolean

        End Function

        Public Overrides ReadOnly Property EnablePasswordReset() As Boolean
            Get

            End Get
        End Property

        Public Overrides ReadOnly Property EnablePasswordRetrieval() As Boolean
            Get
                Dim i As Int16
            End Get
        End Property

        Public Overrides Function FindUsersByEmail(ByVal emailToMatch As String, ByVal pageIndex As Integer, ByVal pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Security.MembershipUserCollection

        End Function

        Public Overrides Function FindUsersByName(ByVal usernameToMatch As String, ByVal pageIndex As Integer, ByVal pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Security.MembershipUserCollection

        End Function

        Public Overrides Function GetAllUsers(ByVal pageIndex As Integer, ByVal pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Security.MembershipUserCollection

        End Function

        Public Overrides Function GetNumberOfUsersOnline() As Integer

        End Function

        Public Overrides Function GetPassword(ByVal username As String, ByVal answer As String) As String

        End Function

        Public Overloads Overrides Function GetUser(ByVal providerUserKey As Object, ByVal userIsOnline As Boolean) As System.Web.Security.MembershipUser

        End Function

        Public Overloads Overrides Function GetUser(ByVal username As String, ByVal userIsOnline As Boolean) As System.Web.Security.MembershipUser

                
        End Function

        Public Overrides Function GetUserNameByEmail(ByVal email As String) As String

        End Function

        Public Overrides ReadOnly Property MaxInvalidPasswordAttempts() As Integer
            Get

            End Get
        End Property

        Public Overrides ReadOnly Property MinRequiredNonAlphanumericCharacters() As Integer
            Get

            End Get
        End Property

        Public Overrides ReadOnly Property MinRequiredPasswordLength() As Integer
            Get

            End Get
        End Property

        Public Overrides ReadOnly Property PasswordAttemptWindow() As Integer
            Get

            End Get
        End Property

        Public Overrides ReadOnly Property PasswordFormat() As System.Web.Security.MembershipPasswordFormat
            Get

            End Get
        End Property

        Public Overrides ReadOnly Property PasswordStrengthRegularExpression() As String
            Get

            End Get
        End Property

        Public Overrides ReadOnly Property RequiresQuestionAndAnswer() As Boolean
            Get

            End Get
        End Property

        Public Overrides ReadOnly Property RequiresUniqueEmail() As Boolean
            Get

            End Get
        End Property

        Public Overrides Function ResetPassword(ByVal username As String, ByVal answer As String) As String

        End Function

        Public Overrides Function UnlockUser(ByVal userName As String) As Boolean

        End Function

        Public Overrides Sub UpdateUser(ByVal user As System.Web.Security.MembershipUser)

        End Sub

        Public Overrides Function ValidateUser(ByVal username As String, ByVal password As String) As Boolean
            Dim conn As New OleDb.OleDbConnection(connStr)
            username.Replace("'", "''")
            password.Replace("'", "''")
            Try
                conn.Open()
                Dim sql As String = _
                   "Select * From utenti WHERE " & _
                   "user=@username AND password=@password"
                Dim comm As New OleDb.OleDbCommand(sql, conn)
                comm.Parameters.AddWithValue("@username", _
                                               username)
                comm.Parameters.AddWithValue("@password", _
                                               password)
                Dim reader As OleDb.OleDbDataReader = comm.ExecuteReader
                If reader.HasRows Then

                    Return True
                Else
                    Return False
                End If
                conn.Close()

            Catch ex As Exception
                Console.Write(ex.ToString)
                Return False
            End Try
        End Function
    End Class 
    edi bene che intervenendo nel metodo specifico posso ottenere il comportamento che desidero.
    Io ad esempio in Validate User vado a leggere nel mio db piuttosto che in quello di default microsoft, prendendo la stringa di connessione dal config, i metodi che non mi interessavano
    non li ho nemmeno toccati

  7. #7
    Utente di HTML.it L'avatar di _J_
    Registrato dal
    Apr 2007
    Messaggi
    218
    ciao!

    la scorsa volta non ti ho detto che uso c#, cmq la logica è quella...
    tu mi hai detto:

    Sempre pensando a quello che ho fatto io, in App_Code ho inserito un mio prodiver chiamato MioSitoMembershipProvider che eredita da Membership Provider e nel momento in cui ho scritto che eredita dalla classe base mi ha spiattellato sotto tutti i metodi customizzabili:
    io ho fatto come hai detto tu e come ho letto nei link che mi hai postato, ed ho creato la mia classe :

    using System;
    using System.Data;

    /// <summary>
    /// Summary description for providerAnagrafe
    /// </summary>

    public class providerAnagrafe: SqlMembershipProvider //providerAnagrafe derivata di SqlMembershipProvider
    {
    public providerAnagrafe()
    {
    //
    // TODO: Add constructor logic here
    //
    }
    }


    ma come vedi non mi ha tirato fuori i metodi della classe base, come ha fatto con te...

    come mai? sapresti darmi una risposta?

  8. #8
    Perche tu usi C#, lo fa solo in VB.NET, almeno, così ho letto
    e dipende anche dal tool, io ho usato Visual Web Developer

  9. #9
    Utente di HTML.it L'avatar di _J_
    Registrato dal
    Apr 2007
    Messaggi
    218
    l'avevo intuito... (la mia solita fortuna... )

    cmq nel wvd (che uso anche io ) con l'intellisense ottengo, dopo aver scritto 'public override', un elenco dei metodi riscrivibili della classe base, quindi devo usare tante volte override per i metodi che devo riscrivere, non me li ritrovo tutti insieme come succede a te (sarebbe 1000 volte più comodo... cmq sempre meglio che niente...)

    un'ultima domanda: devo per forza inserire nel listato TUTTI i metodi, anche se poi ne riscrivo solo uno o due massimo?

  10. #10
    A regola no, dato che è ereditarietà e non implementazione di un interfaccia.
    Però magari è una classe abstract :master:
    bhe prova e poi sappimi dire cosi lo sappiamo in due!

    Io cmq trovo megliore il comportamento con C# così lo leggi meglio senza
    avere tra i piedi anche i metodi che in realtà non hai costumizzato

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.