2022-06-23 12:19:03 +08:00
|
|
|
|
class Api::V1::UsersController < Api::V1::BaseController
|
|
|
|
|
|
|
2022-09-29 12:05:57 +08:00
|
|
|
|
before_action :load_observe_user
|
|
|
|
|
|
before_action :check_auth_for_observe_user
|
|
|
|
|
|
|
|
|
|
|
|
def send_email_vefify_code
|
|
|
|
|
|
code = %W(0 1 2 3 4 5 6 7 8 9)
|
|
|
|
|
|
verification_code = code.sample(6).join
|
|
|
|
|
|
mail = params[:email]
|
|
|
|
|
|
code_type = params[:code_type]
|
|
|
|
|
|
|
|
|
|
|
|
sign = Digest::MD5.hexdigest("#{OPENKEY}#{mail}")
|
|
|
|
|
|
Rails.logger.info sign
|
|
|
|
|
|
|
|
|
|
|
|
tip_exception(501, "请求不合理") if sign != params[:smscode]
|
|
|
|
|
|
|
|
|
|
|
|
# 60s内不能重复发送
|
|
|
|
|
|
send_email_limit_cache_key = "send_email_60_second_limit:#{mail}"
|
2022-10-21 14:31:32 +08:00
|
|
|
|
tip_exception(-2, '请勿频繁操作') if Rails.cache.exist?(send_email_limit_cache_key)
|
2022-09-29 12:05:57 +08:00
|
|
|
|
send_email_control = LimitForbidControl::SendEmailCode.new(mail)
|
2022-10-21 14:31:32 +08:00
|
|
|
|
tip_exception(-2, '邮件发送太频繁,请稍后再试') if send_email_control.forbid?
|
2022-09-29 12:05:57 +08:00
|
|
|
|
begin
|
|
|
|
|
|
UserMailer.update_email(mail, verification_code).deliver_now
|
|
|
|
|
|
|
|
|
|
|
|
Rails.cache.write(send_email_limit_cache_key, 1, expires_in: 1.minute)
|
|
|
|
|
|
send_email_control.increment!
|
|
|
|
|
|
rescue Exception => e
|
|
|
|
|
|
logger_error(e)
|
|
|
|
|
|
tip_exception(-2,"邮件发送失败,请稍后重试")
|
|
|
|
|
|
end
|
|
|
|
|
|
ver_params = {code_type: code_type, code: verification_code, email: mail}
|
2022-10-27 17:57:55 +08:00
|
|
|
|
last_code = VerificationCode.where(code_type: code_type, email: mail).last
|
|
|
|
|
|
last_code.update_attributes!({created_at: Time.current - 10.minute}) if last_code.present?
|
2022-09-29 12:05:57 +08:00
|
|
|
|
data = VerificationCode.new(ver_params)
|
|
|
|
|
|
if data.save!
|
|
|
|
|
|
render_ok
|
|
|
|
|
|
else
|
|
|
|
|
|
tip_exception(-1, "创建数据失败")
|
|
|
|
|
|
end
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
def check_password
|
|
|
|
|
|
password = params[:password]
|
2022-10-21 15:04:26 +08:00
|
|
|
|
return tip_exception(-5, "8~16位密码,支持字母数字和符号") unless password =~ CustomRegexp::PASSWORD
|
|
|
|
|
|
return tip_exception(-5, "密码错误") unless @observe_user.check_password?(password)
|
2022-09-29 12:05:57 +08:00
|
|
|
|
render_ok
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
def check_email
|
|
|
|
|
|
mail = strip(params[:email])
|
2022-10-21 15:04:26 +08:00
|
|
|
|
return tip_exception(-2, "邮件格式有误") unless mail =~ CustomRegexp::EMAIL
|
2022-09-29 12:05:57 +08:00
|
|
|
|
|
|
|
|
|
|
exist_owner = Owner.find_by(mail: mail)
|
2022-10-21 15:04:26 +08:00
|
|
|
|
return tip_exception(-2, '邮箱已被使用') if exist_owner
|
2022-09-29 12:05:57 +08:00
|
|
|
|
render_ok
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
def check_email_verify_code
|
|
|
|
|
|
code = strip(params[:code])
|
|
|
|
|
|
mail = strip(params[:email])
|
|
|
|
|
|
code_type = params[:code_type]
|
|
|
|
|
|
|
2022-10-21 15:04:26 +08:00
|
|
|
|
return tip_exception(-2, "邮件格式有误") unless mail =~ CustomRegexp::EMAIL
|
2022-09-29 12:05:57 +08:00
|
|
|
|
|
|
|
|
|
|
verifi_code = VerificationCode.where(email: mail, code: code, code_type: code_type).last
|
2022-10-21 14:31:32 +08:00
|
|
|
|
return render_ok if code == "123123" && EduSetting.get("code_debug") # 万能验证码,用于测试 # TODO 万能验证码,用于测试
|
2022-09-29 12:05:57 +08:00
|
|
|
|
|
2022-10-21 15:04:26 +08:00
|
|
|
|
return tip_exception(-6, "验证码不正确") if verifi_code&.code != code
|
|
|
|
|
|
return tip_exception(-6, "验证码已失效") if !verifi_code&.effective?
|
2022-09-29 12:05:57 +08:00
|
|
|
|
render_ok
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
def update_email
|
|
|
|
|
|
@result_object = Api::V1::Users::UpdateEmailService.call(@observe_user, params, current_user.gitea_token)
|
|
|
|
|
|
if @result_object
|
|
|
|
|
|
return render_ok
|
|
|
|
|
|
else
|
|
|
|
|
|
return render_error('更改邮箱失败!')
|
|
|
|
|
|
end
|
2022-06-23 12:19:03 +08:00
|
|
|
|
end
|
|
|
|
|
|
end
|