Merge remote-tracking branch 'gitlink/featrue_login_and_register' into standalone_develop

This commit is contained in:
jasder
2021-11-08 15:08:47 +08:00
12 changed files with 172 additions and 97 deletions

View File

@@ -0,0 +1,41 @@
module Accounts
class ResetPasswordForm < ::BaseForm
# login 邮箱、手机号
# code 验证码
# type: 1手机号注册2邮箱注册
attr_accessor :login, :password, :password_confirmation, :code
validates :login, :code, :password, :password_confirmation, presence: true, allow_blank: false
validate :check!
def check!
Rails.logger.info "ResetPasswordForm params: code: #{code} login: #{login}
password: #{password} password_confirmation: #{password_confirmation}"
type = phone_mail_type(login)
db_verifi_code =
if type == 1
check_phone_format(login)
VerificationCode.where(phone: login, code: code, code_type: 2).last
elsif type == 0
check_email_format(login)
VerificationCode.where(email: login, code: code, code_type: 3).last
end
check_password(password)
check_password_confirmation(password, password_confirmation)
check_verifi_code(db_verifi_code, code)
end
def check_phone_format(phone)
phone = strip(phone)
raise LoginError, "登录名格式有误" unless phone =~ CustomRegexp::LOGIN
end
def check_email_format(mail)
mail = strip(mail)
raise EmailError, "邮件格式有误" unless mail =~ CustomRegexp::EMAIL
end
end
end

View File

@@ -1,6 +1,14 @@
class BaseForm
include ActiveModel::Model
Error = Class.new(StandardError)
EmailError = Class.new(Error)
LoginError = Class.new(Error)
PhoneError = Class.new(Error)
PasswordFormatError = Class.new(Error)
VerifiCodeError = Class.new(Error)
PasswordConfirmationError = Class.new(Error)
def check_project_category(project_category_id)
unless project_category_id == ''
raise "project_category_id参数值无效." if project_category_id && !ProjectCategory.exists?(project_category_id)
@@ -26,8 +34,35 @@ class BaseForm
raise "项目标识已被占用." if ReversedKeyword.check_exists?(repository_name)
end
def check_password(password)
password = strip(password)
raise PasswordFormatError, "密码8~16位密码支持字母数字和符号" unless password =~ CustomRegexp::PASSWORD
end
def check_password_confirmation(password, password_confirmation)
password = strip(password)
password_confirmation = strip(password_confirmation)
raise PasswordFormatError, "确认密码为8~16位密码支持字母数字和符号" unless password_confirmation =~ CustomRegexp::PASSWORD
raise PasswordConfirmationError, "两次输入的密码不一致" unless password == password_confirmation
end
def check_verifi_code(verifi_code, code)
code = strip(code)
# return if code == "123123" # TODO 万能验证码,用于测试
raise VerifiCodeError, "验证码不正确" if verifi_code&.code != code
raise VerifiCodeError, "验证码已失效" if !verifi_code&.effective?
end
private
def strip(str)
str.to_s.strip.presence
end
# 1 手机类型0 邮箱类型
# 注意新版的login是自动名生成的
def phone_mail_type value
value =~ /^1\d{10}$/ ? 1 : 0
end
end

View File

@@ -2,13 +2,6 @@ module Register
class BaseForm < ::BaseForm
include ActiveModel::Model
Error = Class.new(StandardError)
EmailError = Class.new(Error)
LoginError = Class.new(Error)
PhoneError = Class.new(Error)
PasswordFormatError = Class.new(Error)
VerifiCodeError = Class.new(Error)
private
def check_login(login)
login = strip(login)
@@ -33,19 +26,5 @@ module Register
phone_exist = Owner.exists?(phone: phone)
raise PhoneError, '手机号已被使用' if phone_exist
end
def check_password(password)
password = strip(password)
raise PasswordFormatError, "8~16位密码支持字母数字和符号" unless password =~ CustomRegexp::PASSWORD
end
def check_verifi_code(verifi_code, code)
code = strip(code)
# return if code == "123123" # TODO 万能验证码,用于测试
raise VerifiCodeError, "验证码不正确" if verifi_code&.code != code
raise VerifiCodeError, "验证码已失效" if !verifi_code&.effective?
end
end
end

View File

@@ -3,13 +3,16 @@ module Register
# login 登陆方式,支持邮箱、登陆、手机号等
# namespace 用户空间地址
# type: 1手机号注册2邮箱注册
attr_accessor :login, :namespace, :password, :code, :type
attr_accessor :login, :namespace, :password, :password_confirmation, :code, :type
validates :login, :code, :password, :namespace, presence: true
validates :login, :code, :password, :password_confirmation, :namespace, presence: true, allow_blank: false
validate :check!
def check!
Rails.logger.info "Register::Form params: code: #{code}; login: #{login}; namespace: #{namespace}; password: #{password}; type: #{type}"
Rails.logger.info "Register::Form params: code: #{code}; login: #{login};
namespace: #{namespace}; password: #{password}; password_confirmation: #{password_confirmation}"
type = phone_mail_type(strip(login))
db_verifi_code =
if type == 1
check_phone(login)
@@ -22,6 +25,7 @@ module Register
check_login(namespace)
check_verifi_code(db_verifi_code, code)
check_password(password)
check_password_confirmation(password, password_confirmation)
end
end
end