设计 invitable:使用令牌重新发送自定义邀请

Devise invitable: Resend custom invitation with token

提问人:Jeremy Thomas 提问时间:9/20/2023 更新时间:9/20/2023 访问量:36

问:

我正在使用第三方电子邮件服务来处理我的所有电子邮件,但在尝试向客户重新发送邀请时遇到了问题。

当我尝试执行以下操作时,没有可用的操作:raw_invitation_token

  def resendInvitation
    user = User.find(params[:id])
    user = User.invite!(email: user.email, location_id: user.location_id) do |u|
      u.skip_invitation = true
    end
    p "TOKEN: #{user.raw_invitation_token}"  # TOKEN IS NIL
    SendNewClientEmail.perform_later(user.id, user.raw_invitation_token)
  end

以下是处理邀请的工作:

class SendNewClientEmail < ApplicationJob
  queue_as :default

  def perform(user_id, token)
    @user = User.find(user_id)

    return unless @user.present? && @user.client.present?

    client = @user.client
    location = @user.location
    email = @user.email

    MailjetService.new(TEMPLATE_ID).send_email(
      location.email,
      email,
      'Welcome!',
      {
        'client_id' => client.try(:id),
        'token' => token
      },
      nil,
      "#{location.name.titleize}"
    )
  end
end

我还能如何访问该令牌,以便电子邮件中的链接能够正常工作?我可以使用其他代币或其他方式吗?

Ruby-on-Rails 设计 邀请

评论

0赞 max 9/21/2023
你认为你为什么需要这个?Gem 已经内置了重新发送邀请的功能。Mailjet 可用于使用 ActionMailer 发送电子邮件
0赞 Jeremy Thomas 9/21/2023
这是一个有趣的解决方案。我一直在使用他们的 API,但我可以通过这种方式连接它。

答:

0赞 Dev Kumar 9/20/2023 #1

这是因为用户已经创建。基于文档参考

请尝试以下操作

用户 = User.find(:id)

user.invite!({ skip_invitation: true }, current_user) # 当前用户设置invited_by属性是可选的

如果已将 :skip_invitation 添加到属性哈希中,也可以执行此操作skip_invitation如果已添加到attr_accessible中。

User.invite!(skip_invitation:真)

使用 skip_invitation 时,还必须在向用户发送令牌时设置invitation_sent_at字段。如果不这样做,当用户尝试接受邀请时,将产生“无效的邀请令牌”错误。

评论

0赞 Jeremy Thomas 9/21/2023
我会接受这个。诀窍是使用 而不是,然后一切都按预期工作。user.inviteUser.invite
0赞 Dev Kumar 11/1/2023
谢谢@JeremyThomas。很乐意帮忙。