mirror of
https://gitlink.org.cn/Gitlink/forgeplus.git
synced 2026-05-16 09:45:57 +08:00
ADD educode user login
This commit is contained in:
@@ -13,24 +13,12 @@ class AccountsController < ApplicationController
|
||||
password = params[:password]
|
||||
platform = (params[:platform] || 'forge')&.gsub(/\s+/, "")
|
||||
|
||||
@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: username, email: email, password: password})
|
||||
if interactor.success?
|
||||
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
|
||||
result = autologin_register(username, email, password, platform)
|
||||
if result[:message].blank?
|
||||
render_ok({user: result[:user]})
|
||||
else
|
||||
render_error(interactor.error)
|
||||
render_error(result[:message])
|
||||
end
|
||||
end
|
||||
rescue Exception => e
|
||||
|
||||
@@ -9,7 +9,8 @@ class ApplicationController < ActionController::Base
|
||||
include GitHelper
|
||||
include LoggerHelper
|
||||
include LoginHelper
|
||||
|
||||
include RegisterHelper
|
||||
|
||||
protect_from_forgery prepend: true, unless: -> { request.format.json? }
|
||||
|
||||
before_action :check_sign
|
||||
|
||||
28
app/controllers/concerns/register_helper.rb
Normal file
28
app/controllers/concerns/register_helper.rb
Normal file
@@ -0,0 +1,28 @@
|
||||
module RegisterHelper
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
def autologin_register(username, email, password, platform= '')
|
||||
result = {message: nil, user: nil}
|
||||
|
||||
user = User.new(admin: false, login: username, mail: email, type: "User")
|
||||
user.password = password
|
||||
user.platform = platform
|
||||
user.activate
|
||||
|
||||
interactor = Gitea::RegisterInteractor.call({username: username, email: email, password: password})
|
||||
if interactor.success?
|
||||
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)
|
||||
result[:user] = {id: user.id, token: user.gitea_token}
|
||||
end
|
||||
else
|
||||
result[:message] = interactor.error
|
||||
end
|
||||
result
|
||||
end
|
||||
|
||||
end
|
||||
36
app/controllers/oauth/educoder_controller.rb
Normal file
36
app/controllers/oauth/educoder_controller.rb
Normal file
@@ -0,0 +1,36 @@
|
||||
class Oauth::EducoderController < Oauth::BaseController
|
||||
def bind
|
||||
begin
|
||||
login = params[:login]
|
||||
callback_url = params[:callback_url]
|
||||
oauth_token = params[:key]
|
||||
raw_pay_load = params[:raw_pay_load]
|
||||
|
||||
::OauthEducoderForm.new({login: login, oauth_token: oauth_token, callback_url: callback_url, raw_pay_load: raw_pay_load}).validate!
|
||||
|
||||
open_user= OpenUser::Educoder.find_by(uid: login)
|
||||
|
||||
if open_user.present? && open_user.user.present? && open_user.user.email_bind?
|
||||
# 存在说明绑定了,验证信息是否齐全,
|
||||
if current_user != open_user.user
|
||||
logout_user
|
||||
successful_authentication(open_user.user)
|
||||
end
|
||||
|
||||
redirect_to callback_url
|
||||
else
|
||||
# 未存在需要进行绑定
|
||||
if current_user.blank? || !current_user.logged?
|
||||
# forge平台未登录
|
||||
redirect_to oauth_register_path(user_id: login, callback_url: callback_url)
|
||||
else
|
||||
# forge平台已登录
|
||||
OpenUsers::Educoder.create!(user: current_user, uid: login)
|
||||
redirect_to callback_url
|
||||
end
|
||||
end
|
||||
rescue WechatOauth::Error => ex
|
||||
render_error(ex.message)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,4 +1,6 @@
|
||||
class OauthController < ApplicationController
|
||||
layout "oauth_register", only: [:register]
|
||||
|
||||
DEFAULT_PASSWORD = "a12345678"
|
||||
TOKEN_CALL_BACK = "/oauth/get_token_callback"
|
||||
USER_INFO = "/oauth/userinfo"
|
||||
@@ -51,4 +53,24 @@ class OauthController < ApplicationController
|
||||
|
||||
def get_token_callback
|
||||
end
|
||||
|
||||
def register
|
||||
# redirect_to params[:callback_url]
|
||||
end
|
||||
|
||||
def auto_register
|
||||
login = params[:login]
|
||||
email = params[:email]
|
||||
password = params[:login]
|
||||
platform = params[:plathform] || 'forge'
|
||||
|
||||
result = autologin_register(login, email, password, platform)
|
||||
|
||||
if result[:message].blank?
|
||||
redirect_to params[:callback_url]
|
||||
else
|
||||
render :action => "auto_register"
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user