make upgrade a bit more seamless

This commit is contained in:
Sam 2016-07-25 12:30:52 +10:00
parent df535c6346
commit 78b88a1633
1 changed files with 17 additions and 5 deletions

View File

@ -8,6 +8,13 @@ class Auth::DefaultCurrentUserProvider
TOKEN_COOKIE ||= "_t".freeze TOKEN_COOKIE ||= "_t".freeze
PATH_INFO ||= "PATH_INFO".freeze PATH_INFO ||= "PATH_INFO".freeze
# TODO remove this stuff in 2017 was only added to smoothen the upgrade process
def self.has_auth_token_updated_at?
(@has_auth_token_updated_at ||=
User.column_names.include?("auth_token_updated_at") ? :true : :false
) == :true
end
# do all current user initialization here # do all current user initialization here
def initialize(env) def initialize(env)
@env = env @env = env
@ -36,10 +43,12 @@ class Auth::DefaultCurrentUserProvider
current_user = nil current_user = nil
if auth_token && auth_token.length == 32 if auth_token && auth_token.length == 32
current_user = User.where(auth_token: auth_token) if ::Auth::DefaultCurrentUserProvider.has_auth_token_updated_at?
.where('auth_token_updated_at IS NULL OR auth_token_updated_at > ?', current_user = User.find_by("auth_token = ? AND (auth_token_updated_at IS NULL OR auth_token_updated_at > ?)",
SiteSetting.maximum_session_age.hours.ago) auth_token, SiteSetting.maximum_session_age.hours.ago)
.first else
current_user = User.find_by(auth_token: auth_token)
end
end end
if current_user && (current_user.suspended? || !current_user.active) if current_user && (current_user.suspended? || !current_user.active)
@ -65,7 +74,10 @@ class Auth::DefaultCurrentUserProvider
end end
def refresh_session(user, session, cookies) def refresh_session(user, session, cookies)
if user && (!user.auth_token_updated_at || user.auth_token_updated_at <= 1.hour.ago) if user &&
::Auth::DefaultCurrentUserProvider.has_auth_token_updated_at? &&
(!user.auth_token_updated_at || user.auth_token_updated_at <= 1.hour.ago)
user.update_column(:auth_token_updated_at, Time.zone.now) user.update_column(:auth_token_updated_at, Time.zone.now)
cookies[TOKEN_COOKIE] = { value: user.auth_token, httponly: true, expires: SiteSetting.maximum_session_age.hours.from_now } cookies[TOKEN_COOKIE] = { value: user.auth_token, httponly: true, expires: SiteSetting.maximum_session_age.hours.from_now }
end end