我的生产服务器上出现随机ActionController::InvalidAuthenticityToken
错误。没有AJAX请求,所有表单都是使用Rails助手创建的(因此它们包含带有authenticity_token的隐藏字段)。
问题在随机表格中随机出现。
在ApplicationController
before_action :expires_now
我Rails.application.config.session_store :cookie_store, key: '_myapp_session'
。这可能是个问题吗?我添加了这个,因为我的用户经常点击“返回”。在他们的浏览器中我并不希望他们缓存结果。
我的session_store.rb初始化程序如下所示:
timeoutable
如果这有任何区别,我会将Devise与config.timeout_in
模块一起使用,并将1.hour
设置为class ApplicationController < ActionController::Base
include Pundit
rescue_from Pundit::NotAuthorizedError, with: :not_authorized
protect_from_forgery with: :exception
add_flash_types :success, :warning, :danger, :info
before_action :authenticate_user!
before_action :set_current_user
before_action :set_cache_headers
def after_sign_out_path_for(_user)
tasks_path
end
def not_authorized
flash[:warning] = 'You are not authorized to execute this action.'
redirect_to tasks_path
end
private
def set_current_user
User.current = current_user
end
def set_cache_headers
response.headers['Cache-Control'] = 'no-cache, no-store'
response.headers['Pragma'] = 'no-cache'
response.headers['Expires'] = 'Fri, 01 Jan 1990 00:00:00 GMT'
end
end
。
我正在使用Rails 5.0.1。
application_controller.rb:
import random
print("Dice Game: try to roll a bigger number than the computer! Good luck!")
print("Type 'go' to roll")
dieroll = input()
if dieroll == 'go':
myNumber = random.randint(1,6)
pcNumber = random.randint(1,6)
print("You rolled " + str(myNumber))
print("He rolled " + str(pcNumber))
if myNumber < pcNumber:
print("You lose!")
if pcNumber < myNumber:
print("You win!")
答案 0 :(得分:0)
是你的before_action:expires_now会导致问题。因为每个进入的请求都会使用户会话到期。
而你可以做的是
class ApplicationController < ActionController::Base
before_action :set_cache_headers
private
def set_cache_headers
response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
response.headers["Pragma"] = "no-cache"
response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
end
end
这将解决您的后退按钮问题。
另一个问题是用户会话在闲置一小时后会超时。一旦超时,您将在服务器端注销,但是客户端此时不知道有关正在计时/注销的会话。因此,您的问题的解决方案是通知客户端有关超时并重定向到登录页面。
检查automatic logout after inactivity/idle以获取更多信息第二个答案。