我们在Rails 3.2.13应用程序中使用omniauth和facebook登录。它在sessions_controller中具有非常标准的样板代码来管理用户会话。它使用CookieStore进行会话。这是sessions_controller:
class SessionsController < ApplicationController
skip_authorization_check
def new
redirect_to '/auth/facebook'
end
def create
auth = request.env["omniauth.auth"]
user = User.where(:provider => auth['provider'],
:uid => auth['uid'].to_s).first || User.create_with_omniauth(auth)
# Reset the session after successful login, per
# 2.8 Session Fixation – Countermeasures:
# http://guides.rubyonrails.org/security.html#session-fixation-countermeasures
reset_session
session[:user_id] = user.id
user.add_role :admin if User.count == 1 # make the first user an admin
if user.email.blank?
redirect_to edit_user_path(user), :alert => "Please enter your email address."
else
redirect_to root_url, :notice => 'Signed in!'
end
end
def destroy
reset_session
redirect_to root_url, :notice => 'Signed out!'
end
def failure
redirect_to root_url, :alert => "Authentication error: #{params[:message].humanize}"
end
end
前几天,我们团队的一名成员正在测试我们的生产版本,然后去登录应用程序。当她浏览应用程序时,她发现自己已经登录为另一位从未使用过该计算机的用户,或者实际上曾经在我们的大楼里。根据她的经历和我们后来的分析,似乎应用程序为她提供了该用户的会话cookie。经过大量研究后,我不明白如何发生这种情况,即机架/轨道框架可能会向错误的用户提供会话cookie。有没有人见过这个或听说过它?有关如何调试此内容或在何处放置日志记录的任何建议,以便更深入地了解可能出现的问题?