如果您使用 umbraco 7,最好使用会员服务。以下是您可以用来实现此目的的简单方法。
请注意 ApplicationContext 对于 8+ 的新 umbraco 版本不再存在,所以请忽略它。其他一切正常。
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;
}