Orchardcms Orchard CMS仅在注册期间使用工作流请求邀请令牌链接到后端数据
我正在使用Orchard CMS v1.9,希望显示一个自定义注册页面,以接受常用用户名/密码/电子邮件和一个附加令牌(邀请令牌)。令牌将用于将用户与服务器上的某些自定义数据相匹配 我浏览了这个博客。但是除了在这个博客中实现的功能之外,我还想强制注册用户输入一个令牌。令牌用于查找服务器上的数据并创建指向userpart的链接 将令牌添加到表单中并不是问题所在,而是查询并将输入的令牌链接到后端数据,并将其存储在我发现不方便的用户部件中Orchardcms Orchard CMS仅在注册期间使用工作流请求邀请令牌链接到后端数据,orchardcms,Orchardcms,我正在使用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模块中完成双因素身份验证。如果你对这种方法感兴趣,我可以发布一个更详细的答案。如果你能详细说明你是如何获得解决方案的,我将不胜感激。我的需求实际上更复杂,我简化了问题的场景。好吧,我刚开始写一个答案,但我会投入更多的时间,尽可能多地删除代码,让它更清晰。坚持住,这需要一些时间;)