You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.8 KiB
85 lines
2.8 KiB
module LoginHelper
|
|
extend ActiveSupport::Concern
|
|
|
|
def edu_setting(name)
|
|
EduSetting.get(name)
|
|
end
|
|
|
|
def autologin_cookie_name
|
|
edu_setting('autologin_cookie_name').presence || 'autologin'
|
|
end
|
|
|
|
def set_autologin_cookie(user)
|
|
token = Token.get_or_create_permanent_login_token(user, "autologin")
|
|
cookie_options = {
|
|
:value => token.value,
|
|
:expires => 1.month.from_now,
|
|
:path => '/',
|
|
:secure => false,
|
|
:httponly => false
|
|
}
|
|
if edu_setting('cookie_domain').present?
|
|
cookie_options = cookie_options.merge(domain: edu_setting('cookie_domain'))
|
|
end
|
|
cookies[autologin_cookie_name] = cookie_options
|
|
Rails.logger.info("cookies is #{cookies}")
|
|
end
|
|
|
|
def successful_authentication(user)
|
|
Rails.logger.info("id: #{user&.id} Successful authentication start: '#{user.login}' from #{request.remote_ip} at #{Time.now.utc}")
|
|
# Valid user
|
|
self.logged_user = user
|
|
session[:"#{default_yun_session}"] = user.id
|
|
# generate a key and set cookie if autologin
|
|
set_autologin_cookie(user)
|
|
|
|
UserAction.create(action_id: user&.id, action_type: 'Login', user_id: user&.id, ip: request.remote_ip)
|
|
user.update_column(:last_login_on, Time.now)
|
|
# 注册完成后有一天的试用申请(先去掉)
|
|
# UserDayCertification.create(user_id: user.id, status: 1)
|
|
end
|
|
|
|
def logout_user
|
|
if User.current.logged?
|
|
if autologin = cookies.delete(autologin_cookie_name)
|
|
User.current.delete_autologin_token(autologin)
|
|
end
|
|
User.current.delete_session_token(session[:tk])
|
|
self.logged_user = nil
|
|
end
|
|
# 云上实验室退出清理当前session
|
|
laboratory ||= (Laboratory.find_by_subdomain(request.subdomain) || Laboratory.find(1))
|
|
default_yun_session = "#{laboratory.try(:identifier).split('.').first}_user_id"
|
|
# end
|
|
session[:"#{default_yun_session}"] = nil
|
|
end
|
|
|
|
# Sets the logged in user
|
|
def logged_user=(user)
|
|
# reset_session
|
|
if user && user.is_a?(User)
|
|
User.current = user
|
|
start_user_session(user)
|
|
else
|
|
User.current = User.anonymous
|
|
end
|
|
end
|
|
|
|
def start_user_session(user)
|
|
# re_subdomain = "#{request.subdomain.split('.').first}_user_id"
|
|
# session[:"#{request.subdomain}_user_id"] = user.id
|
|
# Rails.logger.info("domain_user_id session is: 3333332222111#{session[:"#{request.subdomain}_user_id"]}")
|
|
# Rails.logger.info("user_id session is: 3333332222111#{session[:"#{request.subdomain}_user_id"]}")
|
|
#
|
|
# # if current_laboratory.main_site?
|
|
# # session[:user_id] = user.id
|
|
# # else
|
|
# # session[:"#{request.subdomain}_user_id"] = user.id
|
|
# # end
|
|
|
|
# session[:user_id] = user.id
|
|
session[:"#{default_yun_session}"] = user.id
|
|
session[:ctime] = Time.now.utc.to_i
|
|
session[:atime] = Time.now.utc.to_i
|
|
end
|
|
end |