我决定在cookie级别处理我的应用程序中的会话,所以我有一个看起来像这样的会话控制器:
module Xaaron
class SessionsController < ApplicationController
def new
end
def create
user = Xaaron::User.authenticate_user(params[:user_name], params[:password])
if sign_in(user)
if params[:remember_me]
cookies.permanent[:auth_token] = user.auth_token
else
cookies[:auth_token] = user.auth_token
end
flash[:notice] = "Welcome back, #{user.first_name}."
redirect_to root_path
else
flash[:alert] = "You have entered incorrect credentials."
redirect_to login_path
end
end
def destroy
cookies.delete(:auth_token)
redirect_to root_path
end
end
end
我的应用程序是一种“守门员”应用程序,因此用户可以登录说site.com
并从那里转到product1.site.com
,他们的信息,如用户名,api密钥,所有爵士乐通过promiscuous gem。
我的问题是:
是site.com
中创建的Cookie,可用于product1.site.com
,因此允许我在current_user
中使用特定帮助方法,例如product1.site.com
来查看是否用户已登录?
目的是如果用户A未登录site.com
他们无法访问product1.site.com
答案 0 :(得分:1)
RFC 6265在第4.1.2.3节中有答案。如果Cookie域属性设置为 dom.ain ,则在向 dom.ain , www.dom发出请求时,用户代理会发送Cookie。 ain , sub.dom.ain ,以及 dom.ain 的其他子域。您可以通过Cookie哈希中的域密钥控制cookie域属性,例如
cookies.signed[:secure_session] = {domain: 'dom.ain', value: "#{user.salt}#{user.id}"}