none
ASP.NET MVC 扩展内置User字段的问题! RRS feed

  • 问题

  • 刚刚接触mvc 在建立的项目中我看到mvc已经内置了用户的注册和登录功能,内置的AccountController 中的 Register 注册方法里面是使用 Membership.CreateUser 方法进行注册新用户的,参数为:

    //
            // 摘要:
            //     将具有指定的属性值和唯一的标识符的新用户添加到数据存储区,并返回一个状态参数,指示该用户是否成功创建或用户创建失败的原因。
            //
            // 参数:
            //   username:
            //     新用户的用户名。
            //
            //   password:
            //     新用户的密码。
            //
            //   email:
            //     新用户的电子邮件地址。
            //
            //   passwordQuestion:
            //     成员资格用户的密码提示问题的值。
            //
            //   passwordAnswer:
            //     成员资格用户的密码提示问题答案的值。
            //
            //   isApproved:
            //     一个布尔值,该值指示是否批准新用户登录。
            //
            //   providerUserKey:
            //     该用户的用户标识符,应存储在成员资格数据存储区。
            //
            //   status:
            //     一个 System.Web.Security.MembershipCreateStatus 值,该值指示该用户是否成功创建或用户创建失败的原因。
            //
            // 返回结果:
            //     用于新创建用户的 System.Web.Security.MembershipUser 对象。如果没有创建用户,此方法将返回 null。
            public static MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status);

    我想问的是,这些都是微软写好的方法,如果我的项目中在新建用户的时候还需要填写一些其他信息,比如爱好,年龄,所在地等……那么我该如何去做?还有这个注册用户的方法注册的用户在哪个库里面,该怎么找这个库?如果想要添加注册项的话是不是还要修改那个数据库中的表结构?

    望指教!感谢~

    2013年5月3日 15:36

答案

  • 不管想要添加自定义的或是默认的用户信息,都可直接进web.config里边添加<profile>设定字段,

    详细参考:ProfileBase 类

    至于是哪个库,您确认下MembershipProvider用的是哪个ConnectionString应该就知道了



    Best regards


    • 已编辑 DK. Da 2013年5月4日 5:31 补充内容
    • 已标记为答案 Aran.Wang 2013年5月6日 14:21
    2013年5月4日 5:29
  • MemberShip.User默认是根据微软内部表结构而定制的命令,不可能包含你要的字段。

    如果你需要字段,或许只能重新定义表并且写增删改查方法了。


    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats


    Found any spamming-senders? Please report at: Spam Report

    • 已标记为答案 Aran.Wang 2013年5月6日 14:21
    2013年5月4日 5:56

全部回复

  • 不管想要添加自定义的或是默认的用户信息,都可直接进web.config里边添加<profile>设定字段,

    详细参考:ProfileBase 类

    至于是哪个库,您确认下MembershipProvider用的是哪个ConnectionString应该就知道了



    Best regards


    • 已编辑 DK. Da 2013年5月4日 5:31 补充内容
    • 已标记为答案 Aran.Wang 2013年5月6日 14:21
    2013年5月4日 5:29
  • MemberShip.User默认是根据微软内部表结构而定制的命令,不可能包含你要的字段。

    如果你需要字段,或许只能重新定义表并且写增删改查方法了。


    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats


    Found any spamming-senders? Please report at: Spam Report

    • 已标记为答案 Aran.Wang 2013年5月6日 14:21
    2013年5月4日 5:56
  • 那么 如果自己去创建用户信息的表结构的话,项目中该如何知道用户是否已经登陆了?是怎么去创建用户的票据的?我看微软内部的这套用户机制还带有角色设置,如果我自己去创建表在用户登录后这些角色,用户信息都需要我自己去获取?

    感谢解答!

    2013年5月4日 6:06
  • 也就是说 可以用 aspnet_regsql.exe 去创建这份数据库已经表!然后在原有的表结构上进行扩充字段,然后在web.config里边添加<profile>设定新增的字段,并且修改MembershipProvider用的ConnectionString为创建的那个数据库的链接?是不是这样子的?

    感谢解答!

    2013年5月4日 6:09
  • MemberShip.User默认是根据微软内部表结构而定制的命令,不可能包含你要的字段。

    如果你需要字段,或许只能重新定义表并且写增删改查方法了。


    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats


    Found any spamming-senders? Please report at: Spam Report


    那么 如果自己去创建用户信息的表结构的话,项目中该如何知道用户是否已经登陆了?是怎么去创建用户的票据的?我看微软内部的这套用户机制还带有角色设置,如果我自己去创建表在用户登录后这些角色,用户信息都需要我自己去获取?

    感谢解答!

    2013年5月4日 6:13
  • 不管想要添加自定义的或是默认的用户信息,都可直接进web.config里边添加<profile>设定字段,

    详细参考:ProfileBase 类

    至于是哪个库,您确认下MembershipProvider用的是哪个ConnectionString应该就知道了



    Best regards



    也就是说 可以用 aspnet_regsql.exe 去创建这份数据库已经表!然后在原有的表结构上进行扩充字段,然后在web.config里边添加<profile>设定新增的字段,并且修改MembershipProvider用的ConnectionString为创建的那个数据库的链接?是不是这样子的?

    感谢解答!

    2013年5月4日 6:13
  • 是的,建议你自己创建一个数据库。但是你可以使用微软的Authentication & Authorization机制(在web.config配置):

    1)

    <configuration>
        <system.web>
          <!--登陆方式-->
          <authentication mode="Forms">
            <forms cookieless ="AutoDetect" loginUrl="YourLoginPage.aspx" defaultUrl="YourMainPage.aspx">
            </forms>
          </authentication>
     
          <!--匿名用户禁止登陆-->
          <authorization>
            <deny users="?"/>
          </authorization>
          
          <compilation debug="true" strict="false" explicit="true" targetFramework="4.0" />
        </system.web>
     
    </configuration>

    这样每次你运行程序,如果没有登陆或者登陆时间到之后自动跳转到Login的那个Page,然后强制你登陆。你可以使用:

    Login控件+FormsAuthentication:

    <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="VB.WebForm1" %>
     
    <!DOCTYPE html>
     
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title></title>
        
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                <asp:Login ID="Login1" runat="server"></asp:Login>
            </div>
        </form>
    </body>
    </html>
    
    Public Class WebForm1
        Inherits System.Web.UI.Page
     
        Protected Sub Login1_Authenticate(sender As Objecte As AuthenticateEventArgsHandles Login1.Authenticate
            If (Login1.UserName = "A" AndAlso Login1.Password = "A"Then
                e.Authenticated = True
                '重新回到默认登陆页或者一开始你请求的页面
                FormsAuthentication.RedirectFromLoginPage(User.Identity.NameTrue)
            End If
        End Sub
    End Class

    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats


    Found any spamming-senders? Please report at: Spam Report

    2013年5月4日 12:04