在 Umbraco 中以编程方式创建新成员
本文关键字:方式 创建 新成员 编程 Umbraco | 更新日期: 2023-09-27 18:36:30
我正在尝试以编程方式为我的 Umbraco 站点创建一个新成员,但我不确定我是否正确执行此操作。
我的代码如下所示:
MemberType demoMemberType = new MemberType(1040); //id of membertype ‘demo’
Member newMember = Member.MakeNew(newEmployee.FirstName + " " + newEmployee.LastName, demoMemberType, new umbraco.BusinessLogic.User(0));
newMember.Email = "test@testmail.com";
newMember.Password = "password";
newMember.LoginName = "Test";
newMember.getProperty("firstName").Value = "test";
newMember.Save();
但是当我运行我的代码时,我看不到我的 Umbraco 中出现任何内容。有人可以告诉我我做错了什么吗?
如果您使用的是 umbraco 7,最好使用会员服务。以下是您可以采用的简单方法来实现此目的。
请注意,对于新的本布拉科版本,ApplicationContext 不再存在,从 8+ 开始思考,所以省略一下。其他一切正常。
public int RegisterMember(string memberName, string emailAddress, string memberPassword, string memberTypeAlias, string memberGroupName)
{
int umbracoMemberId = -1;
if (!MemberExists(emailAddress))
{
IMember newMember = ApplicationContext.Current.Services.MemberService.CreateMember(emailAddress, emailAddress, memberName, memberTypeAlias);
try
{
ApplicationContext.Current.Services.MemberService.Save(newMember);
ApplicationContext.Current.Services.MemberService.SavePassword(newMember, memberPassword);
ApplicationContext.Current.Services.MemberService.AssignRole(newMember.Id, memberGroupName);
umbracoMemberId = newMember.Id;
}
catch (Exception ex)
{
throw new Exception("Unable to create new member " + ex.Message);
}
}
return umbracoMemberId;
}
public bool MemberExists(string emailAddress)
{
return (ApplicationContext.Current.Services.MemberService.GetByEmail(emailAddress) != null);
}
对于更真实的 v8 方法,您需要完全放弃 ApplicationContext,转而使用依赖关系注入引擎,如下所示。此示例假设在这种情况下您无法通过构造函数注入依赖项 IMemeberService,因此至少从我到目前为止遇到的情况来看,应该涵盖大多数人的大多数情况,特别是对于那些使用 umbraco 开发应用程序的人
public int RegisterMember(string memberName, string emailAddress, string memberPassword, string memberTypeAlias, string memberGroupName)
{
int umbracoMemberId = -1;
if (!MemberExists(emailAddress))
{
try
{
IMemberService _memberService = Current.Factory.GetInstance<IMemberService>();
IMember newMember = _memberService.CreateMember(body.Email, body.Email, celebName, "Member");
_memberService.Save(newMember);
_memberService.SavePassword(newMember, body.Password);
_memberService.AssignRole(newMember.Id, CMSContentConstants.RootNodes.gGourpAliasCelebrityMember);
umbracoMemberId = newMember.Id;
}
catch (Exception ex)
{
throw new Exception("Unable to create new member " + ex.Message);
}
}
return umbracoMemberId;
}
这个主题非常复杂,但以下是您的模型和控制器的一些代码,应该可以让您走上正确的轨道。希望您对MVC有足够的了解来实现这一目标。
您的模型可以包含以下内容,并使用视图中的输入进行填充
using System.ComponentModel.DataAnnotations;
using System.Web;
namespace MyProject.Models
{
public class MemberModel
{
[Required]
public string Name { get; set; }
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
public string Password { get; set; }
}
}
您的控制器可能如下所示:
using System.Web.Mvc;
using MyProject.Models;
using Umbraco.Web.Mvc;
namespace MyProject.Controllers
{
public class MemberController : SurfaceController
{
public ActionResult SignUp(MemberModel model)
{
if (!ModelState.IsValid)
return CurrentUmbracoPage();
var memberService = Services.MemberService;
if (memberService.GetByEmail(model.Email) != null)
{
ModelState.AddModelError("", "Member already exists");
return CurrentUmbracoPage();
}
var member = memberService.CreateMemberWithIdentity(model.Email, model.Email, model.Name, "MyMemberType");
memberService.Save(member);
memberService.SavePassword(member,model.Password);
Members.Login(model.Email, model.Password);
return Redirect("/");
}
}
}
根据 Umbraco 版本,提供的代码示例已过时。
Umbraco4 更改了 Umbraco 会员模型以使用该 ASP.NET 成员资格提供程序模型,意味着所有抽象类 开箱即用,ASP.NET 能够访问 本布拉科成员。MSDN(和其他)上有很多很好的资源 网站)对于使用 ASP.NET 会员资格,建议的起点是 这里。
文章:
http://our.umbraco.org/wiki/how-tos/membership-providers
http://msdn.microsoft.com/en-us/library/tw292whz.aspx