Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 迈克尔·哈特尔';s Rails教程:未定义的方法'authenticate'u with#u salt';错误_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 迈克尔·哈特尔';s Rails教程:未定义的方法'authenticate'u with#u salt';错误

Ruby on rails 迈克尔·哈特尔';s Rails教程:未定义的方法'authenticate'u with#u salt';错误,ruby-on-rails,ruby,Ruby On Rails,Ruby,我在第九章的末尾,我在根页面上发现了一个错误 会话助手是 module SessionsHelper def sign_in(user) cookies.permanent.signed[:remember_token] = [user.id, user.salt] current_user = user end def current_user @current_user ||= user_from_remember_token end def si

我在第九章的末尾,我在根页面上发现了一个错误

会话助手是

module SessionsHelper
  def sign_in(user)
    cookies.permanent.signed[:remember_token] = [user.id, user.salt]
    current_user = user
  end
  def current_user
    @current_user ||= user_from_remember_token
  end
  def signed_in?
    !current_user.nil?
  end
  def sign_out
    cookies.delete(:remember_token)
    current_user = nil
  end
  private

    def user_from_remember_token
      User.authenticate_with_salt(*remember_token)
    end

    def remember_token
      cookies.signed[:remember_token] || [nil, nil]
    end
end
这是我的user.rb

require 'digest'
class User < ActiveRecord::Base
  attr_accessor :password
  attr_accessible :name, :email, :password, :password_confirmation
  email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

  validates :name, :presence => true,
                    :length => { :maximum => 50 }
  validates :email, :presence => true,
                    :format => { :with => email_regex },
                    :uniqueness => { :case_sensitive => false }
  validates :password, :presence => true,
                        :confirmation => true,
                        :length => {:within => 6..40 }
  before_save :encrypt_password
  def signed_in?
    !current_user.nil?


  def has_password?(submitted_password)
    encrypted_password == encrypt(submitted_password)  
  end

  def self.authenticate(email, submitted_password)
    user = find_by_email(email)
    return nil if user.nil?
    return user if user.has_password?(submitted_password)
  end

  def self.authenticate_with_salt(id, cookie_salt)
    user = find_by_id(id)
    (user && user.salt == cookie_salt)? user : nil
  end

  private
    def encrypt_password
      self.salt = make_salt if new_record?
      self.encrypted_password = encrypt(password)
    end
    def encrypt(string)
      secure_hash("#{salt}--#{string}")
    end
    def make_salt
      secure_hash("#{Time.now.utc}--#{password}")
    end
    def secure_hash(string)
      Digest::SHA2.hexdigest(string)
    end                                         
  end
end
需要“摘要”
类用户true,
:length=>{:max=>50}
验证:email,:presence=>true,
:format=>{:with=>email_regex},
:唯一性=>{:区分大小写=>false}
验证:password,:presence=>true,
:confirmation=>true,
:length=>{:within=>6..40}
保存前:加密密码
def已登录?
!当前_user.nil?
def有密码?(已提交密码)
加密密码==加密(已提交密码)
结束
def自我验证(电子邮件、提交的密码)
用户=通过电子邮件查找(电子邮件)
如果user.nil,则返回nil?
如果用户有密码,则返回用户?(已提交密码)
结束
def自我验证使用_盐(id,cookie_盐)
用户=通过\u id(id)查找\u
(user&&user.salt==cookie\u salt)?用户:无
结束
私有的
def加密密码
self.salt=如果有新记录,则制作盐?
self.encrypted_password=加密(密码)
结束
def加密(字符串)
安全散列(“#{salt}--#{string}”)
结束
def制盐
安全散列(“#{Time.now.utc}--#{password}”)
结束
def secure_散列(字符串)
摘要::SHA2.hexdigest(字符串)
结束
结束
结束
我的会话控制器是

class SessionsController < ApplicationController
  def new
    @title = "Sign in"
  end

  def create
    user = User.authenticate(params[:session][:email], params[:session][:password])
    if user.nil?
      flash.now[:error] = "Invalid email/password combination."
      @title = "Sign in"
      render 'new'
    else
      sign_in user
      redirect_to user  
    end
  end

  def destroy
    sign_out
    redirect_to root_path
  end
end
class sessioncontroller
用户和控制器是

class UsersController < ApplicationController
  def show
    @user = User.find(params[:id])
    @title = @user.name
  end

  def new
    @user = User.new
    @title = "Sign up"
  end

  def create
    @user = User.new(params[:user])
    if @user.save
      sign_in @user
      flash[:success] = "Welcome to the Sample App!"
      redirect_to @user
    else
      @title = "Sign up"
      render 'new'
    end
  end
end
class UsersController
问题是我是Rails的初学者,我正在学习这些教程,但我被困在这里了。 请帮助盖兹

这是错误的屏幕截图


错误说明:未定义的方法“用盐进行身份验证”

我认为这是一个类似的问题,并且链接是


您错过了当前的用户范围。查看上面的链接,希望您能尽快解决问题。

发布错误时,文本总是比截图好。是的,我不知道确切的错误。所以我发布了截图。我也给出了一个关于错误的小文本。谢谢你的评论不是真的。。。这是user.rb中的一个小语法错误。。我的错误:)你错过了登录?user.rb模型中的方法关闭语法:)