【问题标题】:User activation mail preview, wrong activation link用户激活邮件预览,激活链接错误
【发布时间】:2015-12-01 18:46:05
【问题描述】:

我正在按照 railstutorial.org 上的教程添加帐户激活。 如果我从控制台复制链接,则通过访问生成的链接激活帐户有效,邮件显示在服务器日志中。但是,您可以在http://localhost:3000/rails/mailers/user_mailer/account_activation 下找到的邮件预览包含另一个错误链接。问候语中的名称匹配,因此只有令牌是错误的。请在下面找到一些相关代码:

test/mailers/previews/user_mailer_preview.rb:

class UserMailerPreview < ActionMailer::Preview 
# Preview this email at http://localhost:3000/rails/mailers/user_mailer/account_activation
  def account_activation
    user = User.last
    user.activation_token = User.new_token
    UserMailer.account_activation(user)
  end

邮件html.erb:

<p>Hi <%= @user.name %>,</p>
<p>Welcome. Click below to activate account </p> 
<%= link_to "Activate", edit_account_activation_url(@user.activation_token, email: @user.email) %>

在用户模型中:

attr_accessor :remember_token, :activation_token
      before_save   :downcase_email
      before_create :create_activation_digest
  def User.digest(string)
    cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST :
                                                  BCrypt::Engine.cost
    BCrypt::Password.create(string, cost: cost)
  end
def User.new_token
    SecureRandom.urlsafe_base64
  end

  private
    # Converts email to all lower-case.
    def downcase_email
      self.email = email.downcase
    end

    # Creates and assigns the activation token and digest.
    def create_activation_digest
      self.activation_token  = User.new_token
      self.activation_digest = User.digest(activation_token)
    end

和控制器:

  def create
    @user = User.new(user_params)
    if @user.save
             @user.send_activation_email
      flash[:info] = "Please check your email to activate your account."
      redirect_to root_url
    else
      render 'new'
    end
  end

您知道为什么在邮件预览中生成的令牌与服务器日志中的令牌不同吗?

【问题讨论】:

    标签: ruby-on-rails actionmailer


    【解决方案1】:

    有两件事可能会让您感到困惑。首先是两个电子邮件模板上匹配的名称可能只是因为您为两个不同的用户存储了完全相同的名称。第二个原因是每次访问http://.../account_activation,都会为开发数据库中的first用户生成一个新的activation_token。

    按照教程中的说明:

    请注意,清单 10.16 还为 user.activation_token 分配了一个值, 这是必要的,因为清单中的帐户激活模板 10.12 和清单 10.13 需要一个帐户激活令牌。

    发现于https://www.railstutorial.org/book/account_activation_password_reset#code-account_activation_preview

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-30
      • 1970-01-01
      • 2014-06-11
      • 2014-08-17
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多