Ruby on rails 3 Rails记住\u令牌会话不工作

Ruby on rails 3 Rails记住\u令牌会话不工作,ruby-on-rails-3,Ruby On Rails 3,我是RubyonRails新手。我是通过Michel Hartl在互联网上的参考文件来学习的。然而,我在用户登录期间遇到了一个问题,我怀疑before_save没有调用create_memory_令牌方法。我一直在尝试调试这个问题。我的代码如下: user.rb文件: # == Schema Information # # Table name: users # # id :integer(4) not null, primary key # name

我是RubyonRails新手。我是通过Michel Hartl在互联网上的参考文件来学习的。然而,我在用户登录期间遇到了一个问题,我怀疑before_save没有调用create_memory_令牌方法。我一直在尝试调试这个问题。我的代码如下:

user.rb文件:

# == Schema Information
#
# Table name: users
#
#  id              :integer(4)      not null, primary key
#  name            :string(255)
#  email           :string(255)
#  created_at      :datetime        not null
#  updated_at      :datetime        not null
#  password_digest :string(255)
#  username        :string(255)
#  remember_token  :string(255)
#

class User < ActiveRecord::Base
def to_param
username
end
attr_accessible :name, :email, :password, :password_confirmation, :username
has_secure_password


before_save { |user| user.email = email.downcase }
before_save :create_remember_token

private

def create_remember_token
 self.remember_token = SecureRandom.urlsafe_base64
end
end
会话\u controller.rb:

class SessionsController < ApplicationController
def new

end

def create
    user=User.find_by_username(params[:session][:username])
    if user && user.authenticate(params[:session][:password])
        sign_in user
        redirect_to "/@/#{params[:session][:username]}"
    else
        flash.now[:error] = "Login failed! Please try again!"
        render 'new'
    end
end

def destroy

end
end
class sessioncontroller
请帮助我,让我知道问题存在的地方。
干杯:)

只有在创建用户时(即在用户注册时,而不是在用户登录时)才应调用before_save回调。您没有在代码示例中显示整个注册/用户创建流程,但我假设它存在

通过从Rails控制台运行以下命令,可以测试是否调用了create_MEMORE_token(在创建用户时):

User._save_callbacks.select { |cb| cb.kind.eql?(:before) }.collect(&:filter).include?(:create_remember_token)
当且仅当create_memory_token函数在save上运行时,应返回true。更多详细信息,请参阅的“调试回调”部分

如果在注册流期间调用了回调,则应该将membere_令牌保存到数据库中。您可以通过使用Rails控制台(user.last,在创建测试用户之后)检查用户来验证这一点


您的注册/用户创建流程是什么样的?什么复制步骤会导致您描述的问题?

您在登录过程中遇到的问题到底是什么

我询问的原因是,在登录过程中不应该调用create_memory_token方法。当用户被保存(注册)时会调用它

登录过程只是从用户表中获取令牌并将其复制到永久cookie中。登录过程大致如下所示:


登录用户-->session\u helper.rb-->def登录(用户)-->cookies.permanent[:memory\u token]=user.memory\u token-->返回session\u controller.rb-->重定向到…

布局中可能没有使用csrf元标记。尝试删除控制器文件夹中应用程序_controller.rb中的“防止伪造”。然后再次尝试运行该应用程序,如果它有效,那么您没有在布局中添加标签。

我一年前就发布了这个问题。 现在我使用gem进行身份验证。一切正常


谢谢

user_controller.rb:class users controllerUser._save_callbacks.select { |cb| cb.kind.eql?(:before) }.collect(&:filter).include?(:create_remember_token)