有没有人探索过允许用户通过电子邮件的邀请链接在 Orchard 中注册?我希望我的管理员有一个表单,他们可以在其中输入电子邮件地址并向这些人发送注册邀请。
1 回答
我已经实现了非常类似的东西。大多数困难的东西已经内置在 Orchard 中,这只是利用已经存在的东西的一个例子。
创建一个新用户,使用他们的电子邮件地址作为用户名(仅用作占位符)和一个随机密码。他们的注册状态应设置为“待定”,以防止他们在完成邀请过程之前登录。**
在发送电子邮件时,使用该
IUserService.CreateNonce(...)
方法为新用户创建唯一令牌。使用此 nonce 创建一个 URL,例如 ~/invite/{nonce},将其插入您的电子邮件并通过以下方式发送出去IMessageManager.Send(...)
(我们实际上触发了一个规则来执行此操作 - 它允许同时触发其他内容并且是也是一种允许使用令牌自定义传出电子邮件的 hacky 方式;)然后,用户单击该链接并被发送到一个控制器,该控制器处理对 ~/invite/{nonce} 的请求,该控制器将显示一个表单,允许用户输入他们的新用户名和密码,并将 nonce 存储在隐藏字段中。
发布表单会解密 nonce 使用
IUserService.DecryptNonce(...)
它使您可以访问用户名 - 然后您可以将其传递IMembershipService.GetUser(...)
给获取相应的IUser
,并使用发布的其余信息(用户名、密码使用IMembershipService.SetPassword(...)
等)对其进行更新。
IIRC 的大部分工作是通过遵循 Orchard 如何处理丢失密码的请求来完成的,因为它本质上是相同的过程——为给定用户生成一个唯一的 URL,并在用户导航到该 URL 后将其用作检索用户的参考。
** 此时您不需要创建用户内容项,IContentManager.New<UserPart>("User")
只要您设置用户名,使用结果就足够了。如果您在步骤 4 接受邀请之前不想创建新的用户内容项,这将很有用。