在 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 中以编程方式创建新成员

如果您使用的是 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 版本,提供的代码示例已过时。

Umbraco

4 更改了 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