Rails,用户remember_token没有保存?

时间:2014-02-02 23:21:45

标签: ruby-on-rails heroku

我正在将我的应用推送到heroku,似乎用户登录不会持续存在。我认为这是因为我有一个用户在remember_token字段用于在会话中检索用户,但它只是不保存。

在我的用户模型中,我有

before_save :create_remember_token

这是定义的方法

def create_remember_token
      self.remember_token = SecureRandom.urlsafe_base64
    end

但是当我在控制台中创建模型时,即使在保存之后我也会得到一个remember_token:nil。

我的登录方法在我的sessionshelper中,它就像这样

def sign_in(user)
        cookies.permanent[:remember_token] = user.remember_token
        self.current_user = user
    end

def current_user=(user)
    @current_user = user
end

def current_user
    @current_user ||= User.find_by_remember_token(cookies[:remember_token])
    end
def sign_out
        current_user.update_attribute(:remember_token,
                                  User.encrypt(User.new_remember_token))
        cookies.delete(:remember_token)
        self.current_user = nil
    end

我是rails和heroku的新手,所以对这个问题的任何想法都会非常感激!

1 个答案:

答案 0 :(得分:0)

为了确定问题所在,暂时:

替换

before_save :create_remember_token

使用

after_save :create_remember_token

def create_remember_token
  self.remember_token = SecureRandom.urlsafe_base64
end

使用

def create_remember_token
  self.update_column(:remember_token, SecureRandom.urlsafe_base64)
end

您的代码正在做的是:在内存中创建一个新用户。在保存该用户之前,请设置User的remember_token值。然后调用save方法。我假设您没有让remember_token通过强参数,因此remember_token值不会保存到数据库中。

我的代码正在做什么:在内存中创建一个新用户。保存该用户后,直接更改数据库中User的remember_token值。如果这确实是问题,这将回避强参数问题。我不建议将其用作永久性修复。相反,回到原始代码,转到SessionsController并找到params.require(正在发送的哈希).permit(允许参数)的区域。这些是您强大的参数,这是您需要允许记忆令牌通过的地方。在许可区域添加:remember_token。