【问题标题】:Regenerating confirmation token using devise rails 4使用 devise rails 4 重新生成确认令牌
【发布时间】:2015-11-10 15:23:18
【问题描述】:

我正在尝试为尚未确认其帐户的用户重新生成确认令牌。我想在几天后向用户重新发送确认电子邮件。我正在点击此链接为该用户重新生成新令牌,并生成它但仍然无法正常工作。

https://github.com/plataformatec/devise/issues/2615.

我正在本地控制台上执行这些步骤。

@user = User.find_by_email("abc@xyz.com")
token = Devise.token_generator.generate(@user.class, :confirmation_token)

then in token i am getting array such as 

token = ["gfbgk4535843tbk","8545kjbng8hguhggre8gergerkgjebg8gergkerjgg9ergejgn"]

那么我只是发送这样的电子邮件

Devise::Mailer.confirmation_instructinos(@user,token.last).deliver

然后它向该用户发送一封电子邮件,但是当用户单击确认帐户时,它会将用户带到该站点,但是当用户尝试登录时它不起作用。

【问题讨论】:

  • 它不适用于 rails 4
  • 你有没有在 config/devise.rb 文件中检查config.reconfirmable = true ???
  • 根据 devise.rb 文件,我只是简单地做了 config.reconfirmable = true 并将 unconfirmed_email 列添加到用户表中。它没有帮助

标签: ruby-on-rails devise


【解决方案1】:

您可以使用 Devise 内置方法重新发送确认电子邮件:

users = User.where('confirmation_token IS NOT NULL')
users.each do |user|
  user.send_confirmation_instructions
end

send_confirmation_instructions 方法应该生成一个新的令牌if token period expired。 我已经使用这种方法几次,它达到了预期的效果。

你也可以试试resend_confirmation_instructions

  # Resend confirmation token.
  # Regenerates the token if the period is expired.
  def resend_confirmation_instructions
    pending_any_confirmation do
      send_confirmation_instructions
    end
  end

方法上面的cmets 明确说明token会被重新生成。这个我还没试过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 2020-04-14
    • 2017-10-07
    • 2023-03-05
    • 1970-01-01
    相关资源
    最近更新 更多