fixed 多浏览器退出账号时,token不存在处理

This commit is contained in:
xxq250 2024-04-30 15:35:35 +08:00
parent 0a2ab5eddc
commit cb0ecc4194
2 changed files with 40 additions and 41 deletions

View File

@ -318,19 +318,19 @@ class ApplicationController < ActionController::Base
User.current = find_current_user User.current = find_current_user
uid_logger("user_setup: " + (User.current.logged? ? "#{User.current.try(:login)} (id=#{User.current.try(:id)})" : "anonymous")) uid_logger("user_setup: " + (User.current.logged? ? "#{User.current.try(:login)} (id=#{User.current.try(:id)})" : "anonymous"))
# 开放课程通过链接访问的用户 # # 开放课程通过链接访问的用户
if !User.current.logged? && !params[:chinaoocTimestamp].blank? && !params[:websiteName].blank? && !params[:chinaoocKey].blank? # if !User.current.logged? && !params[:chinaoocTimestamp].blank? && !params[:websiteName].blank? && !params[:chinaoocKey].blank?
content = "#{OPENKEY}#{params[:websiteName]}#{params[:chinaoocTimestamp]}" # content = "#{OPENKEY}#{params[:websiteName]}#{params[:chinaoocTimestamp]}"
#
if Digest::MD5.hexdigest(content) == params[:chinaoocKey] # if Digest::MD5.hexdigest(content) == params[:chinaoocKey]
user = open_class_user # user = open_class_user
if user # if user
start_user_session(user) # start_user_session(user)
set_autologin_cookie(user) # set_autologin_cookie(user)
end # end
User.current = user # User.current = user
end # end
end # end
if !User.current.logged? && Rails.env.development? if !User.current.logged? && Rails.env.development?
user = User.find 1 user = User.find 1
@ -363,15 +363,14 @@ class ApplicationController < ActionController::Base
uid_logger("user setup start: session[:user_id] is #{session[:user_id]}") uid_logger("user setup start: session[:user_id] is #{session[:user_id]}")
uid_logger("0000000000000user setup start: default_yun_session is #{default_yun_session}, session[:current_user_id] is #{session[:"#{default_yun_session}"]}") uid_logger("0000000000000user setup start: default_yun_session is #{default_yun_session}, session[:current_user_id] is #{session[:"#{default_yun_session}"]}")
current_domain_session = session[:"#{default_yun_session}"] current_domain_session = session[:"#{default_yun_session}"]
if current_domain_session autologin_user = try_to_autologin
# existing session uid_logger("user setup start: autologin_user is #{autologin_user}")
User.current = (User.active.find(current_domain_session) rescue nil) # 多浏览器退出账号时token不存在处理
elsif autologin_user = try_to_autologin if current_domain_session && autologin_user.nil?
autologin_user autologin_user = (User.active.find(current_domain_session) rescue nil)
elsif params[:format] == 'atom' && params[:key] && request.get? && accept_rss_auth? set_autologin_cookie(autologin_user)
# RSS key authentication does not start a session
User.find_by_rss_key(params[:key])
end end
autologin_user
end end
def try_to_autologin def try_to_autologin

View File

@ -44,7 +44,7 @@ class Token < ActiveRecord::Base
def self.get_or_create_permanent_login_token(user, type) def self.get_or_create_permanent_login_token(user, type)
token = Token.get_token_from_user(user, type) token = Token.get_token_from_user(user, type)
Rails.logger.info "###### Token.get_token_from_user result: #{token&.value}" Rails.logger.info "###### Token.get_token_from_user time:#{Time.new.to_i}, result: #{token&.value}"
unless token unless token
token = Token.create(:user => user, :action => type) token = Token.create(:user => user, :action => type)
Rails.logger.info "###### Token.get_token_from_user is nul and agine create token: #{token&.value}" Rails.logger.info "###### Token.get_token_from_user is nul and agine create token: #{token&.value}"
@ -117,8 +117,8 @@ class Token < ActiveRecord::Base
# Removes obsolete tokens (same user and action) # Removes obsolete tokens (same user and action)
def delete_previous_tokens def delete_previous_tokens
if user # if user
Token.where(['user_id = ? AND action = ?', user.id, action]).delete_all # Token.where(['user_id = ? AND action = ?', user.id, action]).delete_all
end # end
end end
end end