asp.net-mvc-4 - page - tag helpers asp net core
¿Cómo administro los perfiles utilizando SimpleMembership? (4)
Tengo un sitio ASP.NET MVC 4 basado en la plantilla de Internet. Estoy usando SimpleMembership que configuré con esa plantilla.
Puedo modificar la tabla de Usuarios que se ha creado para mí, pero no estoy seguro de la forma "correcta" de modificar los campos adicionales que he agregado. Quiero nombre completo, correo electrónico, etc. y los he agregado a la tabla de usuarios, pero no parece haber forma de actualizar a través de los métodos estáticos de SimpleMembership WebSecurity.
¿Se supone que solo debe actualizar esas propiedades utilizando EF fuera de la API SimpleMembership?
1: debe habilitar las migraciones, preferiblemente con EntityFramework 5
2 - Mueve tu
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "EmailAddress", autoCreateTables: true);
a su método Seed en su clase YourMvcApp / Migrations / Configuration.cs
protected override void Seed(UsersContext context)
{
WebSecurity.InitializeDatabaseConnection(
"DefaultConnection",
"UserProfile",
"UserId",
"UserName", autoCreateTables: true);
if (!Roles.RoleExists("Administrator"))
Roles.CreateRole("Administrator");
if (!WebSecurity.UserExists("lelong37"))
WebSecurity.CreateUserAndAccount(
"lelong37",
"password",
new {Mobile = "+19725000000", IsSmsVerified = false});
if (!Roles.GetRolesForUser("lelong37").Contains("Administrator"))
Roles.AddUsersToRoles(new[] {"lelong37"}, new[] {"Administrator"});
}
Ahora EF5 se encargará de crear su tabla UserProfile, después de hacerlo, llamará a WebSecurity.InitializeDatabaseConnection para registrar solo SimpleMembershipProvider con la tabla UserProfile ya creada, y le indicará a SimpleMembershipProvider qué columna es UserId y UserName. También estoy mostrando un ejemplo de cómo puede agregar usuarios, roles y asociar los dos en su método Seed con propiedades / campos personalizados del perfil de usuario, por ejemplo, Mobile (número) e IsSmsVerified de un usuario .
3 - Ahora, cuando ejecuta la base de datos actualizada desde la Consola del Administrador de Paquetes, EF5 aprovisionará su tabla con todas sus propiedades personalizadas
Para referencias adicionales, consulte este artículo con el código fuente: http://blog.longle.net/2012/09/25/seeding-users-and-roles-with-mvc4-simplemembershipprovider-simpleroleprovider-ef5-codefirst-and-custom-user-properties/
Debe agregarlos a su base de datos (hecho de acuerdo con la descripción)
añádalos a la vista (editar, agregar, eliminar y ver) a menos que se modifiquen
Agrégalos a tu modelo en UserProfiles
Entonces funcionará.
Facilitaron la modificación del perfil con SimpleMembership. SimpleMembership está utilizando el primer modelo de código EF y el perfil de usuario se define en el archivo AccountModels.cs que se genera como parte de la plantilla de Internet para MVC 4. Solo modifique la clase UserProfile y agregue los nuevos campos en la definición de la clase. Por ejemplo, agregar un campo para correo electrónico sería algo como esto:
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public string Email { get; set; }
}
Aquí hay un ejemplo de cómo accederías al campo de correo electrónico:
var context = new UsersContext();
var username = User.Identity.Name;
var user = context.UserProfiles.SingleOrDefault(u => u.UserName == username);
var email = user.Email;
Aquí es cómo se ve la base de datos después de agregar el campo de correo electrónico.
Hay un buen blog que describe algunos de los weblogs.asp.net/jgalloway/archive/2012/08/29/… . También puede encontrar información más detallada sobre cómo personalizar y agregar SimpleMembership aquí .
Si mira alrededor de la línea 273 del accountcontroller
, encontrará esta línea.
db.UserProfiles.Add(new UserProfile { UserName = model.UserName });
Parece que incluso OOTB, ellos (MS) están haciendo lo que usted sugirió y usando EF para actualizar.
Yo también, estoy buscando la forma "correcta" de actualizar y acceder a estas propiedades.
Editar:
Aquí está mi solución (estoy feliz si alguien dice que hay una manera OOTB de hacer esto).
ajuste UserProfile
(la entidad .net de SimpleMembership
) en una clase de sesión.
public static class sessionHelpers {
public static UserProfile userProfile
{
get
{
if (HttpContext.Current.Session["userProfile"] != null)
{
return HttpContext.Current.Session["userProfile"] as UserProfile;
}
else
{
using (UsersContext db = new UsersContext())
{
HttpContext.Current.Session["userInfo"] =
db.UserProfiles.Where(x => x.UserName ==
HttpContext.Current.User.Identity.Name).FirstOrDefault();
return db.UserProfiles.Where(x => x.UserName ==
HttpContext.Current.User.Identity.Name).FirstOrDefault();
}
}
}
set { HttpContext.Current.Session["userProfile"] = value; }
}
}
Desde aquí puede acceder a la tabla de perfil haciendo
string foo = sessionHelpers.userProfile.FIELDNAME;
donde sessionHelpers
es mi clase contenedora. El bloque if solo garantiza que si no se ha establecido en la sesión actual, el acceso a él intentará obtenerlo.