由于我在欧盟工作,我相信所有我制作的网站都必须遵守欧盟这项愚蠢的规定,即未经用户知情同意禁止使用cookie (并要求用户选择)。
我的意图是“完全过火”,要求用户在没有从用户发送的"_#{app_name}_session“cookie时(重新)接受服务条款,并且(重新)只在用户单击”接受“后才在”ToS“中创建它。
基本上,每当有人访问该应用程序时,用户将被迫显式接受ToS或登录才能使用该应用程序/网站。
我如何在Rails 4中实现这一点?
在PHP中,我只需要添加
if (session_status() != PHP_SESSION_ACTIVE){
header("Location: /terms-of-service");
}到index.php的开头
然后,我需要确保唯一的session_start()位于为/terms-of-service页面服务的文件中,并且项目中没有其他实例。
但是如何使用Rails来实现这一点呢?
发布于 2014-10-31 07:53:05
您可以通过在您的before_filter中创建ApplicationController来做到这一点。
class ApplicationController < ActionController::Base
before_filter :validate_toc!
private
def validate_toc!
# check if guest user has not already accepted the toc from session
redirect_to toc_path, alert: 'Please accept ToC to continue.' if sesion[:tos].nil? || !user_logged_in?
end
end注意:sesion[:tos]是用户接受ToS时设置值的地方。toc_path应该在routes.rb中设置,例如:
get '/path/to/toc' => 'pages#toc', :as => :toc发布于 2014-10-31 08:36:59
我检查了@ answer 089247的答案,并根据我的需要对其进行了修改。
before_action :session_check!, except: [:terms_of_service_path]
private
def session_check!
redirect_to terms_of_service_path if !session.exists?
end基本上,如果浏览器会话没有打开会话,用户将被迫接受ToS。然后,ToS页面将创建会话,除非用户拒绝接受ToS。
https://stackoverflow.com/questions/26669639
复制相似问题