Browse Source

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

pull/347/head
xxq250 2 years ago
parent
commit
cb0ecc4194
2 changed files with 40 additions and 41 deletions
  1. +20
    -21
      app/controllers/application_controller.rb
  2. +20
    -20
      app/models/token.rb

+ 20
- 21
app/controllers/application_controller.rb 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?
content = "#{OPENKEY}#{params[:websiteName]}#{params[:chinaoocTimestamp]}"
if Digest::MD5.hexdigest(content) == params[:chinaoocKey]
user = open_class_user
if user
start_user_session(user)
set_autologin_cookie(user)
end
User.current = user
end
end
# # 开放课程通过链接访问的用户
# if !User.current.logged? && !params[:chinaoocTimestamp].blank? && !params[:websiteName].blank? && !params[:chinaoocKey].blank?
# content = "#{OPENKEY}#{params[:websiteName]}#{params[:chinaoocTimestamp]}"
#
# if Digest::MD5.hexdigest(content) == params[:chinaoocKey]
# user = open_class_user
# if user
# start_user_session(user)
# set_autologin_cookie(user)
# end
# User.current = user
# 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
# existing session
User.current = (User.active.find(current_domain_session) rescue nil)
elsif autologin_user = try_to_autologin
autologin_user
elsif params[:format] == 'atom' && params[:key] && request.get? && accept_rss_auth?
# RSS key authentication does not start a session
User.find_by_rss_key(params[:key])
autologin_user = try_to_autologin
uid_logger("user setup start: autologin_user is #{autologin_user}")
# 多浏览器退出账号时,token不存在处理
if current_domain_session && autologin_user.nil?
autologin_user = (User.active.find(current_domain_session) rescue nil)
set_autologin_cookie(autologin_user)
end end
autologin_user
end end


def try_to_autologin def try_to_autologin


+ 20
- 20
app/models/token.rb View File

@@ -1,19 +1,19 @@
# == Schema Information
#
# Table name: tokens
#
# id :integer not null, primary key
# user_id :integer default("0"), not null
# action :string(30) default(""), not null
# value :string(40) default(""), not null
# created_on :datetime not null
#
# Indexes
#
# index_tokens_on_user_id (user_id)
# tokens_value (value) UNIQUE
#
# == Schema Information
#
# Table name: tokens
#
# id :integer not null, primary key
# user_id :integer default("0"), not null
# action :string(30) default(""), not null
# value :string(40) default(""), not null
# created_on :datetime not null
#
# Indexes
#
# index_tokens_on_user_id (user_id)
# tokens_value (value) UNIQUE
#
# #
# This program is free software; you can redistribute it and/or # This program is free software; you can redistribute it and/or
@@ -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
Token.where(['user_id = ? AND action = ?', user.id, action]).delete_all
end
# if user
# Token.where(['user_id = ? AND action = ?', user.id, action]).delete_all
# end
end end
end end

Loading…
Cancel
Save