【发布时间】:2014-09-04 22:31:35
【问题描述】:
我在 WebForms 项目中使用 Membership Provider(身份的前体)。我能够让用户开箱即用。我注册了一些用户,ASP.Net 在我的数据库中创建了以下表格。
dbo.Memberships
dbo.Profiles
dbo.Rules
dbo.Users
dbo.UsersInRoles
dbo.UsersOpenAuthAccounts
dbo.UsersOpenAuthData
我很确定这是会员资格所需的整个表格组。我已成功限制登录用户访问我的网站。我已经创建了角色,并开始将在页面本身中定义的网站部分限制为具有某些角色的用户。
我的问题是为用户添加额外的字段。
到目前为止,我只是简单地将附加信息添加到我的 web.config 文件的配置文件部分。我目前在我的 web.config 中定义了以下内容:
<authentication mode="Forms">
<forms loginUrl="/Account/Login.aspx" timeout="2880" defaultUrl="~/Projects.aspx" />
</authentication>
<authorization>
<deny users="?" />
<deny roles="Admin" />
</authorization>
<profile defaultProvider="SqlProvider">
<providers >
<add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" applicationName="/" />
</providers>
<properties>
<add name="fname" />
<add name="lname" />
<add name="skype" />
<add name="phone" />
</properties>
</profile>
<membership defaultProvider="DefaultMembershipProvider">
<providers>
<add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
</providers>
</membership>
<roleManager enabled="true" defaultProvider="DefaultRoleProvider">
<providers>
<add connectionStringName="DefaultConnection" applicationName="/" name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</providers>
</roleManager>
因此,主要更改是我添加了以下内容以尝试添加其他用户相关字段:
<profile defaultProvider="SqlProvider">
<providers >
...
</providers>
<properties>
<add name="fname" />
<add name="lname" />
<add name="skype" />
<add name="phone" />
</properties>
</profile>
我还更新了 Accounts/Register.aspx 页面,现在看起来像这样:
<%@ Page Title="Register" Language="C#" MasterPageFile="~/DashUser.Master" AutoEventWireup="true" CodeBehind="Register.aspx.cs" Inherits="ArchiTrak.Account.Register" %>
<asp:Content runat="server" ID="BodyContent" ContentPlaceHolderID="BodyContent">
<h2 class="form-signin-heading raleway"><%: Title %>.</h2>
<asp:CreateUserWizard runat="server" ID="RegisterUser" ViewStateMode="Disabled" OnCreatedUser="RegisterUser_CreatedUser">
<LayoutTemplate>
<asp:PlaceHolder runat="server" ID="wizardStepPlaceholder" />
<asp:PlaceHolder runat="server" ID="navigationPlaceholder" />
</LayoutTemplate>
<WizardSteps>
<asp:CreateUserWizardStep runat="server" ID="RegisterUserWizardStep">
<ContentTemplate>
<div class="container">
<div class="row">
<div class="col-md-6">
<p class="raleway">
Passwords are required to be a minimum of <%: Membership.MinRequiredPasswordLength %> characters in length.
</p>
<p class="validation-summary-errors">
<asp:Literal runat="server" ID="ErrorMessage" />
</p>
<asp:TextBox class="form-control" runat="server" ID="UserName" placeholder="User Name"/>
<asp:RequiredFieldValidator runat="server" ControlToValidate="UserName"
CssClass="field-validation-error" ErrorMessage="The user name field is required." />
<asp:TextBox class="form-control" runat="server" ID="fname" placeholder="First Name"/>
<asp:RequiredFieldValidator runat="server" ControlToValidate="fname"
CssClass="field-validation-error" ErrorMessage="The First Name field is required." />
<asp:TextBox class="form-control" runat="server" ID="lname" placeholder="Last Name"/>
<asp:RequiredFieldValidator runat="server" ControlToValidate="lname"
CssClass="field-validation-error" ErrorMessage="The Last Name field is required." />
<asp:TextBox class="form-control" runat="server" ID="phone" placeholder="Phone Number"/>
<asp:RequiredFieldValidator runat="server" ControlToValidate="phone"
CssClass="field-validation-error" ErrorMessage="The Phone field is required." />
<asp:TextBox class="form-control" runat="server" ID="skype" placeholder="Skype Account"/>
<asp:RequiredFieldValidator runat="server" ControlToValidate="skype"
CssClass="field-validation-error" ErrorMessage="The Skype field is required." />
<asp:TextBox class="form-control" runat="server" ID="Email" TextMode="Email" placeholder="Email"/>
<asp:RequiredFieldValidator runat="server" ControlToValidate="Email"
CssClass="field-validation-error" ErrorMessage="The email address field is required." />
<asp:TextBox class="form-control" runat="server" ID="Password" TextMode="Password" placeholder="Password"/>
<asp:RequiredFieldValidator runat="server" ControlToValidate="Password"
CssClass="field-validation-error" ErrorMessage="The password field is required."/>
<asp:TextBox class="form-control" runat="server" ID="ConfirmPassword" TextMode="Password" placeholder="Password"/>
<asp:RequiredFieldValidator runat="server" ControlToValidate="ConfirmPassword"
CssClass="field-validation-error" Display="Dynamic" ErrorMessage="The confirm password field is required." />
<asp:CompareValidator runat="server" ControlToCompare="Password" ControlToValidate="ConfirmPassword"
CssClass="field-validation-error" Display="Dynamic" ErrorMessage="The password and confirmation password do not match." />
<br />
<asp:Button runat="server" CommandName="MoveNext" Text="Register" CssClass="btn btn-lg btn-primary btn-block"/>
</div>
</div>
</div>
</ContentTemplate>
<CustomNavigationTemplate />
</asp:CreateUserWizardStep>
</WizardSteps>
</asp:CreateUserWizard>
</asp:Content>
我添加了额外的字段来收集名字和姓氏、Skype 和电话号码。但是当我为新用户提交注册时,数据库的配置文件表中没有显示任何内容。
Register.aspx.cs 如下所示:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using Microsoft.AspNet.Membership.OpenAuth;
namespace ArchiTrak.Account
{
public partial class Register : Page
{
protected void Page_Load(object sender, EventArgs e)
{
RegisterUser.ContinueDestinationPageUrl = Request.QueryString["ReturnUrl"];
}
protected void RegisterUser_CreatedUser(object sender, EventArgs e)
{
FormsAuthentication.SetAuthCookie(RegisterUser.UserName, createPersistentCookie: false);
string continueUrl = RegisterUser.ContinueDestinationPageUrl;
if (!OpenAuth.IsLocalUrl(continueUrl))
{
continueUrl = "~/Projects.aspx";
}
Response.Redirect(continueUrl);
}
}
}
从我读到的关于添加附加信息的配置文件的方式来看,它只需要进行与我上面所做的类似的最小修改即可。我错过了什么吗?是否有任何好的教程可以使用 Web 表单一步一步地解决这个问题?我一直在寻找信息和教程,所以我找到了角色和配置文件上的微软链接。我就是这样走到这一步的。我习惯了身份,但不能在这个项目中使用它。任何帮助将不胜感激,或者只是朝着正确的方向发展。
【问题讨论】:
-
配置文件仅在网站项目模板中开箱即用。您将不得不实施自定义配置文件,但在 SO 上已经有很多指向此的链接:)
-
这对我帮助不大。仅网站项目模板?听起来不对……
-
我正在使用开箱即用的基本 WebForms 模板。我不确定你的意思。我的应用程序正在使用开箱即用的角色和注册,为什么我不能使用个人资料?
-
这是我上次用于 Web 表单配置文件的内容:weblogs.asp.net/joewrobel/…
-
谢谢我开始检查了
标签: asp.net webforms asp.net-membership profile