我在以前的版本中使用devise_invitable将不同的邀请电子邮件发送给不同的用户角色。例如,管理员用户将收到与普通用户不同的邀请。要将不同的电子邮件发送给用户,我执行了以下操作:
@user = User.invite!(params[:user], current_user) do |u|
u.skip_invitation = true
end
if params[:admin_id] # admin invite
@user.deliver_invitation
email = NotificationMailer.admin_invite_message(@user, @venue, @from, @subject, @content)
else
@user.deliver_invitation
NotificationMailer.user_invite_message(@user, @from, @subject, @content)
end
这种方法提供了很大的灵活性。但随着令牌生成方式的最新变化(见下文),不再可能使用这种方法。
# Generates a new random token for invitation, and stores the time
# this token is being generated
def generate_invitation_token
raw, enc = Devise.token_generator.generate(self.class, :invitation_token)
@raw_invitation_token = raw
self.invitation_token = enc
end
现在使用resource.invitation_token会产生令牌的加密版本,并且无法从我的NotificationMailer中获取原始令牌,因此我可以将其发送给用户。
任何提示和解决方法都将不胜感激。
(opened an issue关于设计邀请函github)
答案 0 :(得分:2)
要访问@raw_invitation_token,您只需将attr_reader :raw_invitation_token
添加到User
模型。