tutorial net mvc framework example español asp asp.net asp.net-core asp.net-identity-3

asp.net - net - mvc 5 login example in c#



Cómo usar ASP.NET Identity 3.0 sin Entity Framework (2)

¿Hay algún ejemplo que no utilice EntityFramework y donde la clase ApplicationUser no se derive de Microsoft.AspNet.Identity.EntityFramework.IdentityUser?

Dado que ASP.NET Identity 3 es parte de .NET Framework 5, que aún no se ha lanzado, supongo que no encontrará ningún ejemplo.

En ASP.NET Identity 2.x se necesitaba para implementar la interfaz IUser. Parece que no hay tal interfaz ahora, por lo que no estamos seguros de cómo definir la clase de "Usuario" correctamente. Casi no hay documentación sobre este tema.

Una vez más, la falta de documentos probablemente se deba a la naturaleza inédita del software. Sin embargo, solo mirando el código fuente , parece que ApplicationUser puede derivar de cualquier objeto POCO, sin la necesidad de implementar una IUser<TKey> .

En cuanto a la configuración de servicios, eche un vistazo a IdentityServiceCollectionExtensions y IdentityEntityFrameworkBuilderExtensions . Parece que el primero está en el núcleo de identidad como un medio para proporcionar un contexto dentro del cual se pueden registrar servicios para la identidad de la aplicación, mientras que el segundo es una implementación específica del marco de la entidad que usa ese contexto.

La solución para implementar algo que use ASP.NET Identity 3 pero no EF parece que solo sería una cuestión de proporcionar diferentes implementaciones para las interfaces del servicio de identidad y luego conectar esas dependencias durante la configuración de la aplicación. Puede utilizar la implementación base de EntityFramework como una guía sobre cómo hacer bricolaje. Pero Caveat Emptor, la identidad 3 podría volver a cambiar antes del lanzamiento final, por lo que cualquier cosa que construya contra la identidad 3 ahora está sujeta a cambios.

Todos los ejemplos que he visto hasta ahora para ASP.NET Identity 3.0 utilizan Entity Framework para almacenar datos relacionados con el usuario.

¿Hay algún ejemplo que no utilice Entity Framework y donde la clase ApplicationUser no se derive de Microsoft.AspNet.Identity.EntityFramework.IdentityUser ?

En ASP.NET Identity 2.x se necesitaba para implementar la interfaz IUser . Parece que no hay tal interfaz ahora, por lo que no estamos seguros de cómo definir correctamente la clase de User . Casi no hay documentación sobre este tema.

El segundo problema es con la llamada AddIdentity en Startup.ConfigureServices . Está bastante ligado a las clases particulares del espacio de nombres Microsoft.AspNet.Identity.EntityFramework y no está claro cómo registrar servicios de identidad sin esas clases.


Lo he implementado en mi proyecto, lo principal que debes implementar es UserStore y RoleStore

mis clases SiteUser y SiteRole no heredan de nada

lo principal es agregar sus propios servicios antes de permitir que la identidad de asp.net agregue sus propios servicios

services.TryAdd(ServiceDescriptor.Scoped<IUserStore<SiteUser>, UserStore<SiteUser>>()); services.TryAdd(ServiceDescriptor.Scoped<IUserPasswordStore<SiteUser>, UserStore<SiteUser>>()); services.TryAdd(ServiceDescriptor.Scoped<IUserEmailStore<SiteUser>, UserStore<SiteUser>>()); services.TryAdd(ServiceDescriptor.Scoped<IUserLoginStore<SiteUser>, UserStore<SiteUser>>()); services.TryAdd(ServiceDescriptor.Scoped<IUserRoleStore<SiteUser>, UserStore<SiteUser>>()); services.TryAdd(ServiceDescriptor.Scoped<IUserClaimStore<SiteUser>, UserStore<SiteUser>>()); services.TryAdd(ServiceDescriptor.Scoped<IUserPhoneNumberStore<SiteUser>, UserStore<SiteUser>>()); services.TryAdd(ServiceDescriptor.Scoped<IUserLockoutStore<SiteUser>, UserStore<SiteUser>>()); services.TryAdd(ServiceDescriptor.Scoped<IUserTwoFactorStore<SiteUser>, UserStore<SiteUser>>()); services.TryAdd(ServiceDescriptor.Scoped<IRoleStore<SiteRole>, RoleStore<SiteRole>>());

algunos de los mismos espacios se registrarán aquí, pero utilizarán los suyos si se registran primero

services.AddIdentity<SiteUser, SiteRole>();