0

我一直在尝试关注https://github.com/plataformatec/devise/wiki/How-To:-Override-confirmations-so-users-can-pick-their-own-passwords-as-part-of-confirmation -激活以允许我的应用程序上的用户在注册时只提供一个电子邮件地址,然后在他们确认电子邮件后提示他们输入其余信息。但是这种方法似乎有点破损,或者我不完全理解。

在说明中,confirms_controller 中有这个方法:

  def with_unconfirmed_confirmable
    original_token = params[:confirmation_token]
    confirmation_token = Devise.token_generator.digest(User, :confirmation_token, original_token)
    @confirmable = User.find_or_initialize_with_error_by(:confirmation_token, confirmation_token)
    if !@confirmable.new_record?
      @confirmable.only_if_unconfirmed {yield}
    end
  end

如果我保持原样,我总是会收到“确认令牌无效”错误。这似乎是由于新令牌正在生成但未找到。你可以在日志中看到我的意思:

Started GET "/users/confirmation?confirmation_token=9835abdff3d03d0a29e1c5a640c6a22f1ed6289b4cf696ed514ba183aad49caa" for 127.0.0.1 at 2013-11-12 07:39:42 -0700
Processing by ConfirmationsController#show as HTML
  Parameters: {"confirmation_token"=>"9835abdff3d03d0a29e1c5a640c6a22f1ed6289b4cf696ed514ba183aad49caa"}
  ESC[1mESC[36mUser Load (0.3ms)ESC[0m  ESC[1mSELECT "users".* FROM "users" WHERE "users"."confirmation_token" = '98e17d2ea3cc3fcba5cab7d37bd9a865fc2e318372cb293b541b8a05b46f
e4a3' LIMIT 1ESC[0m

但是,如果我将方法更改为使用 original_token 而不是生成的 Confirmation_token,则一切正常。我错过了什么?我应该担心不使用派生令牌吗?

4

1 回答 1

0

原来这个错误是因为我的应用程序使用的是旧版本的设计,无意中升级到了设计 3.1。感谢这篇文章:升级到设计 3.1 => 获取重置密码令牌无效

我更新了邮件程序以发送正确的令牌,现在一切正常。

于 2013-11-12T14:53:50.510 回答