2 domande

domenica 23 settembre 2007 - 17.55

_J_ Profilo | Senior Member

salve ragazzi,
ho creato un controllo login sotto il quale ho piazzato una label che dovrebbe dirmi se l'username digitato nella textbox 'username'del controllo login esiste o meno...

vorrei sapere se c'è una proprietà, un metodo ecc. del controllo login per fare questo controllo, o se devo per forza fare una select.

inoltre vorrei sapere una cosa:
io ho un sito web, che solo l'amministratore può modificare, e gli altri utenti 'normali' possono solo vedere.
Tale sito è sul mio pc... se un giorno dovessi metterlo in rete, come posso fare per fare in modo che l'amministratore possa effettuare le sue modifiche solo da un pc, mentre non può effettuarne se da pc remoto?

cioè come posso fare per poter modificare il sito, pubblicato in rete, solo dal mio pc mentre dagli altri no?
C'è qualche funzionalità in asp.net che me lo permette?

grazie in anticipo a chi risponderà!
_J_

"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."

franco_rh Profilo | Junior Member

C'è il controllo LoginStatus che in abbinamento con il controllo login indica se l'utente è connesso o meno e puoi definire la pagina a cui si viene indirizzati dopo il logout.
Il controllo LoginName visualizza 'Anonimo' nel caso in cui non si sia fatto login ed il nome utente in caso si sia autenticati. Tutto senza scrivere codice.

Seconda domanda:
dipende dalla struttura del sito:
come vi si accede, con nome utente e password? Oppure con autenticazione di windows?
Nel secondo caso il sistema di autenticazione deve essere riscritto, nel primo caso basta fornire username e password all'accesso ed essere registrati al sito come amministratore.
Qui ulteriori dettagli: http://msdn2.microsoft.com/it-it/library/6hy1xzbw(VS.80).aspx
(seleziona e incolla in barra di navigazione perchè non viene visualizzato correttamente il link)

Se poi con 'modificare il sito' intendi cambiarne la struttura, riscrivere le pagine ecc. in quel caso è ovvio che il provider ti fornirà dei dati di accesso dove, sotto protocollo ftp, potrai fare le tue modifiche.


MarijCat

_J_ Profilo | Senior Member

>C'è il controllo LoginStatus che in abbinamento con il controllo
>login indica se l'utente è connesso o meno e puoi definire la
>pagina a cui si viene indirizzati dopo il logout.
>Il controllo LoginName visualizza 'Anonimo' nel caso in cui non
>si sia fatto login ed il nome utente in caso si sia autenticati.
>Tutto senza scrivere codice.

sì, conosco quel controllo e l'ho pure usato, ma io intendevo dire se un utente si è registrato o meno, non se si è autenticato... forse sono stato poco chiaro... se è così mi scuso..

>Seconda domanda:
>dipende dalla struttura del sito:
>come vi si accede, con nome utente e password? Oppure con autenticazione
>di windows?
>Nel secondo caso il sistema di autenticazione deve essere riscritto,
>nel primo caso basta fornire username e password all'accesso
>ed essere registrati al sito come amministratore.
>Qui ulteriori dettagli: http://msdn2.microsoft.com/it-it/library/6hy1xzbw(VS.80).aspx

uso l'autenticazione forms e non uso iis... si può bloccare anche con queste features l'accesso da pc remoti?
cmq leggerò il link che mi hai postato... intanto grazie!
_J_

"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."

franco_rh Profilo | Junior Member

Inizio con la seconda domanda:
Devi crearti una cartella nella directory principale del sito web e la chiami ad esempio Administrator o Admin, per dirne una, e vi inserisci un file web.config in cui aggiungi le seguenti righe:
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<authorization >
<allow roles ="Administrator"/>
<deny users ="*"/>
</authorization>
</system.web>
</configuration>

Accertati comunque di aver creato i ruoli e che esista almeno un utente 'Administrator' con Username e Password. (vedi link postato prima)

Ora in questa cartella potrai inserire tutte le pagine web che sono visibili solo all'amministratore e che verranno negate agli utenti anonimi o non Administrator. Non dimenticare di modificare i riferimenti ai percorsi delle pagine se sposti pagine già esistenti: le pagine di primo livello verranno ora a trovarsi in secondo livello: es. \Default.aspx diventa \Admin\Default.aspx
Ricorda che l'accesso è basato su autenticazione 'Forms' e quindi ci si potrà comunque connettere da ogni computer a patto di poter conoscere Username e Password.
Potresti permettere al sito di riconoscere l'IP del computer Administrator e quindi autenticare solo lui in questo modo:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim IPAddress As String = Request.UserHostAddress
If IPAddress= "123.98.9.2" Then
'authentication
End If
End Sub

Ma questo sarebbe possibile solo nel caso che il computer Administrator avesse un IP fisso, gli IP fissi si richiedono specificamente e se non sbaglio (correggetemi) li attribuiscono i gestori di linea.

Prima domanda:
ancora non mi è chiaro: l'utente vorrebbe sapere se è disponibile uno specifico username?
oppure tu vorresti sapere in tempo reale ciò che sta scrivendo l'utente in casella prima di fare login?
Perchè nel primo caso in effetti ti converrebbe fare direttamente una query al database.
Nel secondo caso ti converrebbe usare ajax per sapere in tempo reale cosa stà digitando l'utente prima di fare login.
Spiegati meglio.
MarijCat

_J_ Profilo | Senior Member

>Potresti permettere al sito di riconoscere l'IP del computer
>Administrator e quindi autenticare solo lui in questo modo:
>
>Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
>Handles Me.Load
> Dim IPAddress As String = Request.UserHostAddress
> If IPAddress= "123.98.9.2" Then
> 'authentication
> End If
> End Sub
>
>Ma questo sarebbe possibile solo nel caso che il computer Administrator
>avesse un IP fisso, gli IP fissi si richiedono specificamente
>e se non sbaglio (correggetemi) li attribuiscono i gestori di
>linea.
perfetto, era questo ciò che volevo sapere... quello che hai detto in precedenza è già stato fatto...

>Prima domanda:
>ancora non mi è chiaro: l'utente vorrebbe sapere se è disponibile
>uno specifico username?
>oppure tu vorresti sapere in tempo reale ciò che sta scrivendo
>l'utente in casella prima di fare login?
>Perchè nel primo caso in effetti ti converrebbe fare direttamente
>una query al database.
>Nel secondo caso ti converrebbe usare ajax per sapere in tempo
>reale cosa stà digitando l'utente prima di fare login.
allora, un utente entra nel mio sito, e quando prova ad effettuare il login il sistema deve farlo accedere se effettivamente l'user e la pswd digitate esistono... se invece prova ad accedere un utente non registrato (che quindi non ha queste credenziali) il sistema deve negargli l'accesso perchè non ha trovato le credenziali inserite...
e se devo dirti la verità, sono sempre più convinto che la soluzione del db sia la migliore...
_J_

"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."

franco_rh Profilo | Junior Member

Adesso è tutto chiaro e la cosa è semplicissima.
Vai nelle prorpietà del controllo Login e nella proprietà 'DestinationPage' inserisci l'url alla pagina dove vuoi che venga indirizzato l'utente loggato; puoi settare anche la proprietà FailureAction (di solito va bene 'Refresh', ricarica cioè la stessa pagina di login).
In pratica settando DestinationPage quando l'utente fa login, se viene riconosciuto viene reindirizzato alla pagina che hai predisposto per gli utenti loggati e specificata in DestinationPage.
Naturalmente questo controllo deve essere abbinato obbligatoriamente con il controllo CreateUserWizard che ha la funzione di creare l'utente quando ci si registra.
MarijCat

franco_rh Profilo | Junior Member

Adesso è tutto chiaro e la cosa è semplicissima.
Vai nelle prorpietà del controllo Login e nella proprietà 'DestinationPage' inserisci l'url alla pagina dove vuoi che venga indirizzato l'utente loggato; puoi settare anche la proprietà FailureAction (di solito va bene 'Refresh', ricarica cioè la stessa pagina di login).
In pratica settando DestinationPage quando l'utente fa login, se viene riconosciuto viene reindirizzato alla pagina che hai predisposto per gli utenti loggati e specificata in DestinationPage.
Naturalmente questo controllo deve essere abbinato obbligatoriamente con il controllo CreateUserWizard che ha la funzione di creare l'utente quando ci si registra.
MarijCat

_J_ Profilo | Senior Member

>Adesso è tutto chiaro e la cosa è semplicissima.
>Vai nelle prorpietà del controllo Login e nella proprietà 'DestinationPage'
>inserisci l'url alla pagina dove vuoi che venga indirizzato l'utente
>loggato; puoi settare anche la proprietà FailureAction (di solito
>va bene 'Refresh', ricarica cioè la stessa pagina di login).
>In pratica settando DestinationPage quando l'utente fa login,
>se viene riconosciuto viene reindirizzato alla pagina che hai
>predisposto per gli utenti loggati e specificata in DestinationPage.
>Naturalmente questo controllo deve essere abbinato obbligatoriamente
>con il controllo CreateUserWizard che ha la funzione di creare
>l'utente quando ci si registra.

ho capito quello che hai capito tu, e tutto ciò che hai suggerito l'ho fatto... quello che voglio gestire io è il caso di utenti MAI registrati, cioè utenti che tentano di accedere al sito, provano a loggarsi, non sono riconosciuti (ovviamente perchè mai registrati) e rimandati quindi alla pagina del createuserwizard (ho usato anche quello...)
_J_

"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."

franco_rh Profilo | Junior Member

Prova questo:

Imports System.Web.Security
Partial Class _Default
Inherits System.Web.UI.Page

Protected Sub Login1_LoggingIn(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.LoginCancelEventArgs) Handles Login1.LoggingIn

Dim Username As String = Login1.UserName
Dim l As Integer = Web.Security.Membership.FindUsersByName(Username).Count
If l > 0 Then
'utente esistente
else
response.redirect(pagina che crea l'utente)
End If

End Sub

End Class


In pratica avendo un controllo login login1 durante l'evento loggingIn (quindi quando parte la richiesta ma non è ancora completa) si passa come parametro alla classe web.security.membership.finduserbyname il nome immesso nel controllo login dall'utente. Se il nome è già presente la variabile integer l assumerà un valore maggiore di zero altrimenti il nome è inesistente e puoi fare un response.redirect alla pagina del loginWizard.
MarijCat

_J_ Profilo | Senior Member


>Imports System.Web.Security
>Partial Class _Default
> Inherits System.Web.UI.Page
>
>Protected Sub Login1_LoggingIn(ByVal sender As Object, ByVal
>e As System.Web.UI.WebControls.LoginCancelEventArgs) Handles
>Login1.LoggingIn
>
> Dim Username As String = Login1.UserName
>Dim l As Integer = Web.Security.Membership.FindUsersByName(Username).Count
> If l > 0 Then
> 'utente esistente
> else
> response.redirect(pagina che crea l'utente)
> End If
>
> End Sub
>
>End Class

ok, lo tradurrò in c#, intanto grazie!
senti, se i>0 l'user esiste... quindi lascio vuoto il corpo dell'if, giusto?
_J_

"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."

franco_rh Profilo | Junior Member

In pratica dovrebbe andare bene lasciare l'if l>0 vuoto.
MarijCat

_J_ Profilo | Senior Member

Lo immaginavo... grazie per l'aiuto!
_J_

"Chi fa domande rischia di sembrare stupido,
chi non ne fa rischia di restare stupido..."

"Conosco me stesso? No, non parlo con gli estranei..."
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5