加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 无法弄清楚这个rails错误:未定义的方法`remem

发布时间:2020-12-17 02:23:13 所属栏目:百科 来源:网络整理
导读:我按照Michael Hartl的教程为我的应用程序提供了一个身份验证系统,但我一直得到这个remember_token方法错误: undefined method `remember_token=' for #User:0x00000005e44238 我不明白为什么remember_token是未定义的,因为Hartl的教程说它是由我相信的记忆
我按照Michael Hartl的教程为我的应用程序提供了一个身份验证系统,但我一直得到这个remember_token方法错误:

undefined method `remember_token=' for #<User:0x00000005e44238>

我不明白为什么remember_token是未定义的,因为Hartl的教程说它是由我相信的记忆方法自动生成的.

这是应用程序跟踪:

app/models/user.rb:23:in `remember'
app/helpers/sessions_helper.rb:10:in `remember'
app/controllers/sessions_controller.rb:11:in `create'

相关用户.rb:

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

def remember
  self.remember_token = User.new_token
  update_attribute(:remember_digest,User.digest(remember_token))


end

会话控制器:

class SessionsController < ApplicationController

  def new
  end

  def create
    user = User.find_by(email: params[:session][:email].downcase)
    if user && user.authenticate(params[:session][:password])
    log_in user
    params[:session][:remember_me] == '1' ? remember(user) : forget(user)
    remember user
    redirect_back_or user
  else
     # Create an error message.
     flash.now[:danger] = 'Invalid email/password combination' # Not quite right!
     render 'new'
   end
   end

   def destroy
    forget(current_user)
    session.delete(:user_id)
    @current_user = nil
    redirect_to root_url
    end
    end

相关会议助手:

def remember(user)
  user.remember
  cookies.permanent.signed[:user_id] = user.id
  cookies.permanent[:remember_token] = user.remember_token
end

def forget(user)
  user.forget
  cookies.delete(:user_id)
  cookies.delete(:remember_token)
end

# Returns the current logged-in user (if any).
def current_user
  if (user_id = session[:user_id])
    @current_user ||= User.find_by(id: user_id)
  elsif (user_id = cookies.signed[:user_id])
    user = User.find_by(id: user_id)
  if user && user.authenticated?(cookies[:remember_token])
    log_in user
    @current_user = user
   end
  end

 end

解决方法

我猜你跳过了必须在你的数据库中添加一个新列remember_token的部分(参见: https://www.railstutorial.org/book/sign_in_out#cha-sign_in_sign_out上的清单8.16)

如果您执行了该步骤,则需要迁移数据库并重新启动服务器:

$bundle exec rake db:migrate
$touch tmp/restart.txt

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读