Rails password_reset recordnotfound

时间:2014-06-19 22:41:31

标签: ruby-on-rails session forgot-password

当我传入我的网址以重置密码时出现错误,例如:localhost:3000 / password_reset / SADASIJDSIDJ1231231 / edit&lt; ----给我ActiveRecord :: RecordNotFound,它指向我的password_reset_controller < / p>

def edit
    @user = User.find_by_password_reset_token!(params[:id])
  end

这是我的应用程序控制器(请注意&#34;包含SessionsHelper&#34;)

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.

  #om du lägger till kod här kmr inte sessions funka när du är inloggad wtf???
  #tog bort detta protect_from_forgery with: :exception
  include SessionsHelper
  protect_from_forgery 

   private

  def current_user
    @current_user ||= User.find_by_auth_token(cookies[:auth_token]) if cookies[:auth_token]
  end
  helper_method :current_user

end

这是我的password_reset_controller

class PasswordResetsController < ApplicationController
  def new
  end

 def create
    user = User.find_by_email(params[:email])
    user.send_password_reset if user
    redirect_to root_url, :notice => "Email sent with password reset instructions."
  end

  def edit
    @user = User.find_by_password_reset_token!(params[:id])
  end

  def update
    @user = User.find_by_password_reset_token!(params[:id])
    if @user.password_reset_sent_at < 2.hours.ago
      redirect_to new_password_reset_path, :alert => "Password reset has expired."
    elsif @user.update_attributes(params.permit![:user])
      redirect_to root_url, :notice => "Password has been reset!"
    else
      render :edit
    end
  end
end

我如何解决它:

感谢jorge,我知道在数据库中没有生成password_reset_token。所以我回到了我的model / user.rb

def send_password_reset
    generate_token(:password_reset_token)
    self.password_reset_sent_at = Time.zone.now
    save!
    UserMailer.password_reset(self).deliver
  end

我加了回来&#34;保存!&#34;它是&#34;保存&#34;之前。然后我又得到另一个错误,说密码不能为空。

所以我删除了这两行

 # validates :password, length: { minimum: 6 }, presence: true
  #validates :password_confirmation, presence: true 

相反,我添加了这一行

  validates_presence_of :password, :on => :create

现在一切正常。谢谢你的耐心jorge。我欠你一个大的。

1 个答案:

答案 0 :(得分:1)

您是否使用密码重置令牌“SADASIJDSIDJ1231231”检查数据库中是否存在用户?

看起来以下行没有找到用户:

@user = User.find_by_password_reset_token!(params[:id]) 

请包含您的User课程 - send_password_reset方法可能无法正确保存令牌。