将参数添加到默认身份验证

时间:2014-01-28 14:19:30

标签: asp.net asp.net-mvc forms-authentication

如何将一些字段/属性添加到默认身份验证用户配置文件?

例如,我想要包含用户电话号码和电子邮件地址。

用于创建数据库的所有默认属性存储/保存在哪里?

即,包括默认属性,如登录名和密码。现在我想为该配置文件添加更多属性,这些属性也将存储在数据库中。

2 个答案:

答案 0 :(得分:1)

我建议使用内置的轻量级SimpleMembership授权。它将自动提供Asp.NET成员资格表和特定的UserProfile表来存储其他相关属性。

这是开箱即用的Visual Studio

的MVC 4互联网应用程序模板

我建议如下:

private static SimpleMembershipInitializer _initializer;
private static object _initializerLock = new object();
private static bool _isInitialized;

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    WebApiConfig.Register(GlobalConfiguration.Configuration);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
    AuthConfig.RegisterAuth();

    LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock);
}

public class SimpleMembershipInitializer
{
    public SimpleMembershipInitializer()
    {
        using (var context = new UsersContext())
            context.UserProfiles.Find(1);

        if (!WebSecurity.Initialized)
            WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
    }
}

这是从global.asax中的application_start方法初始化Internet应用程序上的simplemembership授权。

正如您所看到的,默认情况下,用于存储相关用户信息的表/类称为“UserProfile”。只需首先通过Entity Framework代码更改“UserProfile”(帐户模型)类,它将自动调整您的数据模型。

给出的例子:

public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId{ get; set; }
    public string UserName { get; set; }

    //other relevant properties
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string PhoneNumber { get; set;
    //etc
}

我希望这些信息可以指出你正确的方向。如果您有任何评论,请随时提出。

答案 1 :(得分:0)

你可能想这样做:

public static class AuthManager
{
    private static string CurrentUserKey = "CurrentUser";

    public static User CurrentUser
    {
        get
        {
            if (HttpContext.Current.Request.IsAuthenticated == false) return null;

            if (HttpContext.Current.Session[CurrentUserKey] != null)
               return (User)HttpContext.Current.Session[CurrentUserKey];

            var userName = HttpContext.Current.User.Identity.Name;

            var user = SomeUserRepository.GetUserByName(userName);
            HttpContext.Current.Session[CurrentUserKey] = user;

            return user;
        }
    }
}