348 messaggi dal 10 marzo 2013
Ciao
Le funzionalita che vorrei implementare sono le seguenti:
Recupero password, doppia validazione, gestione dei ruoli e tutto quello che c'e' da studiare, mi piacerebbe riuscire a capire bene come funziona.
Se poi, trovo tutto in quell' articolo va bene cosi.
Grazie tante.
se hai piacere ti rendero partecipe dei progressi o dei "regressi" in caso.
Un saluto e
Buona Pasqua
Modificato da Oiram il 20 aprile 2019 13:13 -
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Mario e buona Pasqu(etta) anche a te!

Per la gestione dei ruoli puoi leggere questo.
https://www.aspitalia.com/script/1194/Usare-RoleManager-Gestire-Ruoli-ASP.NET-Identity.aspx

Mentre per la conferma via email e il recupero della password leggi qui. Te lo linko in inglese perché la traduzione automatica in italiano lascia a desiderare.
https://docs.microsoft.com/en-us/aspnet/identity/overview/features-api/account-confirmation-and-password-recovery-with-aspnet-identity


ciao,
Moreno

Enjoy learning and just keep making
348 messaggi dal 10 marzo 2013
Buon pomeriggio.
Scusa Moreno mi sono incastrato sulla prima lettura del tuo articolo riguardante la gestione dei ruoli nel seguente punto:


Per prima cosa, apriamo il file App_Start/IdentityConfig.cs e creiamo al suo interno una classe ApplicationRoleManager derivata da RoleManager. Sarà il nostro punto di accesso ai metodi di gestione


ma dove trovo questo File? App_Start/IdentityConfig.cs

Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Mario,
quel file non ce l'hai perché non sei partito dal template di Visual Studio. Comunque non è importante. Puoi ottenere un riferimento al RoleManager in questo modo.
Ecco un esempio completo in cui viene creato un nuovo ruolo e poi viene associato ad un utente esistente.

        Dim userStore As New UserStore(Of IdentityUser)
        Dim roleStore As New RoleStore(Of IdentityRole, String, IdentityUserRole)(userStore.Context)
        Dim userManager As New UserManager(Of IdentityUser)(userStore)
        Dim roleManager As New RoleManager(Of IdentityRole)(roleStore)

        'Creo un ruolo
        Dim role As New IdentityRole("Amministratore")
        roleManager.Create(role)

        'Recupero un utente esistente
        Dim user = userManager.FindByName("Mario")

        'Aggiungo il ruolo all'utente
        Dim userRole = New IdentityUserRole With {.UserId = user.Id, .RoleId = role.Id}
        user.Roles.Add(userRole)

        'Salvo
        userManager.Update(user)


ciao,
Moreno
Modificato da BrightSoul il 24 aprile 2019 11:30 -

Enjoy learning and just keep making
348 messaggi dal 10 marzo 2013
Ci sono molte cose che mi sfuggono:
Ad esempio, sempre in questa applicazione, ho gia scritto una parte dove gli utenti accedono all'applicazione con user id e password. Gli utenti pero, vengono registrati dall'amministratore dell'azienda, i ruoli per questa parte gli ho inseriti manualmente in una tabella (che non c'entra niente con identity) e vengono assegnati in base alle limitazione che hanno date agli utenti.

Con identity nel modo che ho capito io (che è sicuramente errato), ho fatto si che il ruolo venga generato sempre durante la registrazione dell'utente, in questo caso in automatico, ma c'è una parte che proprio non capisco

 Dim role As New IdentityRole("Guest")
        roleManager.Create(role)
        Dim user1 = userManager.FindByName("Mario")
        Dim userRole = New IdentityUserRole With {.UserId = User.Id, .RoleId = role.Id}
        User.Roles.Add(userRole)
        userManager.Update(User)


Cosi io assegno il ruolo ad un utente gia esistente, ma io vorrei assegnare il ruolo man mano che gli utenti si registrano, cosa mi sfugge?
Ho fatto la seguente cosa, ma mi rendo conto che è sbagliata:

Imports Microsoft.AspNet.Identity
Imports Microsoft.AspNet.Identity.EntityFramework
Imports System
Imports System.Linq


'Namespace WebFormsIdentity

Partial Class Register
    Inherits System.Web.UI.Page

    Protected Sub CreateUser_Click(ByVal sender As Object, ByVal e As EventArgs)
        Dim userStore = New UserStore(Of IdentityUser)()
        Dim manager = New UserManager(Of IdentityUser)(userStore)
        Dim User = New IdentityUser() With {
            .UserName = UserName.Text
            }
        Dim Result As IdentityResult = manager.Create(User, Password.Text)

        If Result.Succeeded Then
            StatusMessage.Text = String.Format("User {0} was created successfully", UserName)
        Else
            StatusMessage.Text = Result.Errors.FirstOrDefault()
        End If

        'Dim userStore As New UserStore(Of IdentityUser)
        Dim roleStore As New RoleStore(Of IdentityRole, String, IdentityUserRole)(userStore.Context)
        Dim userManager As New UserManager(Of IdentityUser)(userStore)
        Dim roleManager As New RoleManager(Of IdentityRole)(roleStore)


        Dim role As New IdentityRole("Guest")
        roleManager.Create(role)
        Dim user1 = userManager.FindByName("Mario")
        Dim userRole = New IdentityUserRole With {.UserId = User.Id, .RoleId = role.Id}
        User.Roles.Add(userRole)
        userManager.Update(User)

    End Sub


End Class
'End Namespace
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Mario,

ma io vorrei assegnare il ruolo man mano che gli utenti si registrano

Si può fare, ma non puoi copiare-incollare il codice che ti mando, altrimenti non funzionerà mai. Devi spendere del tempo per capire cosa fa e poi adeguarlo alla tua situazione.

Prendi questa riga di codice, per esempio:
Dim user1 = userManager.FindByName("Mario")

Questa serve a recuperare un utente chiamato "Mario". Ma tu nel form di registrazione non hai creato un utente chiamato "Mario". Tu stai creando un utente il cui nome risiede nella casella UserName.Text.
Quindi al limite avresti dovuto fare:
Dim user1 = userManager.FindByName(UserName.Text)


A proposito del ruolo: non devi crearlo ogni volta con roleManager.Create. Come dice il nome del metodo Create, questo serve per creare un ruolo. Quindi dovrai crearlo solo se non esiste già.
Cambia il codice così:
Protected Sub CreateUser_Click(ByVal sender As Object, ByVal e As EventArgs)
    Dim userStore = New UserStore(Of IdentityUser)()
    Dim roleStore As New RoleStore(Of IdentityRole, String, IdentityUserRole)(userStore.Context)
    
    'Creo userManager e roleManager che sono gli oggetti da usare per gestire gli utenti e i ruoli
    Dim userManager = New UserManager(Of IdentityUser)(userStore)
    Dim roleManager As New RoleManager(Of IdentityRole)(roleStore)
    
    'Creo un nuovo utente
    Dim user = New IdentityUser() With {
        .UserName = UserName.Text
    }
    
    'Chiedo che il nuovo utente venga salvato nel database
    Dim userCreationResult As IdentityResult = userManager.Create(user, Password.Text)
    
    'Verifico se la creazione dell'utente nel database ha avuto successo
    If userCreationResult.Succeeded Then
        'L'utente è stato creato, mi preparo ad assegnare il ruolo all'utente
        Dim roleName = "Guest"
    
        'Verifico se il ruolo esiste nel database
        If Not roleManager.RoleExists(roleName) Then
            'Se non esiste lo creo
            Dim role As New IdentityRole(roleName)
            roleManager.Create(role)
        End If
    
        'Chiedo che il ruolo sia assegnato all'utente nel database
        Dim roleAssignmentResult = userManager.AddToRole(user.Id, roleName)
    
        'Verifico che l'assegnazione del ruolo all'utente si sia conclusa con successo
        If roleAssignmentResult.Succeeded Then
            'Tutto ok: il ruolo è stato assegnato all'utente
            StatusMessage.Text = String.Format("User {0} was created successfully and it was added to the {1} role", UserName.Text, roleName)
        Else
            'Si è verificato un errore nell'assegnare il ruolo all'utente
            'L'utente però era stato creato
            StatusMessage.Text = roleAssignmentResult.Errors.FirstOrDefault()
        End If
    Else
        'C'è stato un errore di creazione dell'utente
        StatusMessage.Text = userCreationResult.Errors.FirstOrDefault()
    End If
End Sub


Studia il funzionamento degli oggetti roleManager e userManager. In Visual Studio puoi scrivere roleManager. oppure userManager. (col punto alla fine) per far apparire l'intellisense. Lì potrai vedere che ci sono tanti metodi che ti permettono di recuperare, creare e salvare ruoli e utenti.
Ci devi mettere impegno per capire il codice che ti posto, altrimenti se fai copia-incolla non riuscirai a raggiungere il tuo obiettivo.

ciao,
Moreno

Enjoy learning and just keep making
348 messaggi dal 10 marzo 2013
Hai ragione, sono un poltrone.
Ora è tutto più chiaro, ma è una giungla per me, dovreste creare un manuale dedicato solo ad ASP.NET Identity.
Non sai quante castagne dal fuoco mi hai tolto.
Grazie 1000 per l’aiuto.
348 messaggi dal 10 marzo 2013
Sto creando la pagina di login si fa per dire.
studiando su un tutorial (quello che ti ho linkato qualche giorno fa), mi dice di aggiungere al progetto la classe di avvio owin: e' corretto?
Perche la trovo solo in c# e non vb? e' normale anche questo?

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.