Orchardcms Orchard CMS仅在注册期间使用工作流请求邀请令牌链接到后端数据

Orchardcms Orchard CMS仅在注册期间使用工作流请求邀请令牌链接到后端数据,orchardcms,Orchardcms,我正在使用Orchard CMS v1.9,希望显示一个自定义注册页面,以接受常用用户名/密码/电子邮件和一个附加令牌(邀请令牌)。令牌将用于将用户与服务器上的某些自定义数据相匹配 我浏览了这个博客。但是除了在这个博客中实现的功能之外,我还想强制注册用户输入一个令牌。令牌用于查找服务器上的数据并创建指向userpart的链接 将令牌添加到表单中并不是问题所在,而是查询并将输入的令牌链接到后端数据,并将其存储在我发现不方便的用户部件中 这是否可能仅使用工作流?还是我需要自定义模块?我没有看到允许

我正在使用Orchard CMS v1.9,希望显示一个自定义注册页面,以接受常用用户名/密码/电子邮件和一个附加令牌(邀请令牌)。令牌将用于将用户与服务器上的某些自定义数据相匹配

我浏览了这个博客。但是除了在这个博客中实现的功能之外,我还想强制注册用户输入一个令牌。令牌用于查找服务器上的数据并创建指向userpart的链接

将令牌添加到表单中并不是问题所在,而是查询并将输入的令牌链接到后端数据,并将其存储在我发现不方便的用户部件中

  • 这是否可能仅使用工作流?还是我需要自定义模块?我没有看到允许我匹配令牌和链接的自定义操作

  • 是否已有可执行某些操作的自定义模块
    相似的

  • 免责声明:此方法目前基于Orchard 1.10,但最初是在1.9.x分支上开发的。它不依赖于动态表单和工作流,但我认为您可以通过这些模块实现类似的功能

    好的,所以我最后用我们的扩展用户/激活系统方法构建了一个示例模块。我删去了很多代码,但也加入了一些有趣的部分,它们与您的答案没有直接关系

    首先,您应该检查它是否有您正在搜索的激活操作。您可能需要扩展orchard登录视图,并相应地包括一些GET&POST操作

    [AllowAnonymous]
    [HttpGet]
    公共操作结果激活(字符串激活代码)
    {
    //验证资料。。。。
    var viewModel=新CustomUserActivate
    {
    //这是您要查找的激活代码
    ActivationCode=userFromActivationCode.ActivationCode,
    UserName=userFromActivationCode.User.UserName,
    WelcomeText=userFromActivationCode.WelcomeText,
    Email=userfromtactivationcode.User.Email
    };
    返回此.View(viewModel);
    }
    [异名]
    [HttpPost]
    [ValidateAntiForgeryToken]
    公共操作结果激活(CustomUserActivate输入)
    {
    如果(输入==null)
    {
    this.ModelState.AddModelError(“_form”,this.T(“参数不能为null”).Text);
    }
    CustomUserPart CustomUserPart=null;
    如果(this.ModelState.IsValid)
    {
    customUserPart=this.myService.GetCustomUserByActivationCode(input.ActivationCode);
    if(customUserPart==null | | customUserPart.User==null | | | customUserPart.User.UserName!=input.UserName)
    {
    this.notifier.Add(NotifyType.Error,this.T(“激活失败”);
    }
    if(string.IsNullOrEmpty(input.Email))
    {
    this.ModelState.AddModelError(“电子邮件”,this.T(“您必须指定电子邮件地址”).Text);
    }
    else if(input.Email.Length>=255)
    {
    this.ModelState.addmodeleror(“Email”,this.T(“您提供的电子邮件地址太长”).Text);
    }
    else if(!Regex.IsMatch(input.Email、UserPart.EmailPattern、RegexOptions.IgnoreCase))
    {
    // http://haacked.com/archive/2007/08/21/i-knew-how-to-validate-an-email-address-until-i.aspx    
    this.ModelState.AddModelError(“电子邮件”,this.T(“您必须指定有效的电子邮件地址”).Text);
    }
    else if(!this.myService.VerifyEmailUnicity(customUserPart.User.Id,input.Email))
    {
    this.ModelState.AddModelError(“电子邮件”,this.T(“此电子邮件地址已在使用”).Text);
    }
    }
    如果(!this.ModelState.IsValid)
    {
    返回此.View(输入);
    }
    Assert(customUserPart!=null,“customUserPart!=null”);
    var user=customUserPart.user;
    var userParams=new CreateUserParams(user.UserName,input.Password,input.Email,passwordQuestion:null,passwordAnswer:null,isApproved:true);
    this.myService.ActivateCustomUser(customUserPart.Id,userParams);
    this.notifier.Add(NotifyType.Information,this.T(“您的帐户已激活。您现在可以登录”);
    返回这个.RedirectToAction(“登录”,“帐户”,new{area=“Orchard.Users”});
    }
    
    有趣的事情发生在我们的生活中。 我们设计了激活系统,这样你仍然可以利用Orchard.用户模块的所有功能,如电子邮件验证。 为此,我们实现了一些,您可以决定在使用ActivationCode时用户get是否完全激活,或者是否触发正常的Orchard机制

    我想最好在VisualStudio中签出模块并逐步完成代码

    下面是我们激活视图的两个屏幕截图

    步骤1-输入您的激活码

    步骤2-填写剩余字段

    利润

    所有额外的源代码都是在工作流、事件、令牌等中使用CustomUser/ActivationCode。但我将此留给您去发现

    如果你想在GitHub上对源代码进行更详细的描述,请告诉我。
    希望这有帮助

    我们有一个类似的系统(但对于自定义用户来说更复杂)。但是,我认为在您的场景中,最简单的方法是将inviteToken存储在自定义记录中,并将其链接到用户。您可能还希望构建一个处理链接的自定义MVC控制器。看看如何在Orchard.Users模块中完成双因素身份验证。如果你对这种方法感兴趣,我可以发布一个更详细的答案。如果你能详细说明你是如何获得解决方案的,我将不胜感激。我的需求实际上更复杂,我简化了问题的场景。好吧,我刚开始写一个答案,但我会投入更多的时间,尽可能多地删除代码,让它更清晰。坚持住,这需要一些时间;)