我正在将我的应用推送到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的新手,所以对这个问题的任何想法都会非常感激!
答案 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。