diff --git a/app/controllers/accounts_controller.rb b/app/controllers/accounts_controller.rb index 4525b0deb..cff5c77a2 100644 --- a/app/controllers/accounts_controller.rb +++ b/app/controllers/accounts_controller.rb @@ -8,24 +8,24 @@ class AccountsController < ApplicationController # 其他平台同步注册的用户 def remote_register - phone = params[:phone]&.gsub(/\s+/, "") + username = params[:username]&.gsub(/\s+/, "") email = params[:email]&.gsub(/\s+/, "") password = params[:password] platform = (params[:platform] || 'forge')&.gsub(/\s+/, "") - @user = User.new(admin: false, login: phone, mail: email, phone: phone, type: "User") - @user.admin = false - @user.type = 'User' + @user = User.new(admin: false, login: username, mail: email, type: "User") @user.password = password @user.platform = platform @user.activate + ActiveRecord::Base.transaction do - interactor = Gitea::RegisterInteractor.call({username: phone, email: email, password: password}) + interactor = Gitea::RegisterInteractor.call({username: username, email: email, password: password}) if interactor.success? - result = Gitea::User::GenerateTokenService.new(phone, password).call + gitea_user = interactor.result + result = Gitea::User::GenerateTokenService.new(username, password).call @user.gitea_token = result['sha1'] + @user.gitea_uid = gitea_user['id'] if @user.save! - UserExtension.create!(user_id: @user.id) render_ok({user: {id: @user.id, token: @user.gitea_token}}) end else diff --git a/app/forms/gitea/user_form.rb b/app/forms/gitea/user_form.rb index 7c52bf57a..8fc83dbfc 100644 --- a/app/forms/gitea/user_form.rb +++ b/app/forms/gitea/user_form.rb @@ -1,4 +1,5 @@ class Gitea::UserForm + include ActiveModel::Model EMAIL_REGEX = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/ include ActiveModel::Model @@ -8,6 +9,8 @@ class Gitea::UserForm validates :email, presence: true, format: { with: EMAIL_REGEX, multiline: true } validates :password, presence: true + validate :check_username, :check_email + attr_reader :record def persist @@ -21,4 +24,14 @@ class Gitea::UserForm false end end + + private + def check_username + # errors.add(:login, :exist) + raise "#{username} 已使用." if User.exists?(login: username.strip) + end + + def check_email + raise "#{email} 已使用." if User.exists?(mail: email.strip) + end end diff --git a/app/interactors/gitea/register_interactor.rb b/app/interactors/gitea/register_interactor.rb index 5b6481a0e..909a67911 100644 --- a/app/interactors/gitea/register_interactor.rb +++ b/app/interactors/gitea/register_interactor.rb @@ -6,7 +6,7 @@ module Gitea interactor end - attr_reader :error + attr_reader :error, :result def initialize(params) @params = params @@ -16,10 +16,14 @@ module Gitea @error.nil? end + def result + @result + end + def run Gitea::UserForm.new(params).validate! - Gitea::User::RegisterService.new(params).call - # Gitea::Client.new.register("nifewf", "123@qq.com", "djs_D_00001") + response = Gitea::User::RegisterService.new(params).call + render_result(response) rescue Exception => exception Rails.logger.info "Exception ===========> #{exception.message}" fail!(exception.message) @@ -33,5 +37,9 @@ module Gitea def fail!(error) @error = error end + + def render_result(response) + @result = response + end end end