当我传入我的网址以重置密码时出现错误,例如: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。我欠你一个大的。
答案 0 :(得分:1)
您是否使用密码重置令牌“SADASIJDSIDJ1231231”检查数据库中是否存在用户?
看起来以下行没有找到用户:
@user = User.find_by_password_reset_token!(params[:id])
请包含您的User
课程 - send_password_reset
方法可能无法正确保存令牌。