用户激活邮件预览,错误的激活链接

时间:2015-09-05 21:31:11

标签: ruby-on-rails actionmailer

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

测试/邮寄者/预览/ 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

您是否知道为什么在邮件预览中会生成与serverlogs中的令牌不同的令牌?

1 个答案:

答案 0 :(得分:0)

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

根据教程中的说明:

  

注意,清单10.16也为user.activation_token赋值,   这是必要的,因为列表中的帐户激活模板   10.12和清单10.13需要一个帐户激活令牌。

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