| @@ -332,40 +332,56 @@ class UsersController < ApplicationController | |||
| def sso_login | |||
| if params[:login].present? && !current_user.logged? && params[:websiteName].present? | |||
| req_params = { "login" => "#{params[:login]}", "private_token" => "hriEn3UwXfJs3PmyXnSH" } | |||
| api_url= "https://data.educoder.net" | |||
| client = Faraday.new(url: api_url) | |||
| response = client.public_send("get", "/api/sources/get_user_info_by_login", req_params) | |||
| result = JSON.parse(response.body) | |||
| if result["status"].to_s == "0" | |||
| # login 邮箱 手机号 姓名 学校/单位 | |||
| user_info = result["data"] | |||
| Rails.logger.info("user_info====== #{user_info}") | |||
| login = user_info["login"] | |||
| email = user_info["mail"] | |||
| phone = user_info["phone"] | |||
| real_name = user_info["username"] | |||
| department_name = user_info["school"] | |||
| # 没有用户时,新建用户并登录 | |||
| user = User.where("login = ? or phone = ? or mail = ? ", "#{login}", phone, email).first | |||
| if user.present? | |||
| # 手机号先记录,后续用 | |||
| user.update_column(:phone, "#{phone}") if phone.present? | |||
| user = User.where("login = ?", "#{params[:login].presence}").first | |||
| # 已同步注册,直接登录 | |||
| if user.present? | |||
| successful_authentication(user) | |||
| else | |||
| autologin_register_by_educoder(params[:login].presence) | |||
| end | |||
| end | |||
| end | |||
| # 通过login参数查询头歌账号信息,注册并登录 | |||
| def autologin_register_by_educoder(edu_login) | |||
| req_params = { "login" => "#{edu_login}", "private_token" => "hriEn3UwXfJs3PmyXnSH" } | |||
| api_url= "https://data.educoder.net" | |||
| client = Faraday.new(url: api_url) | |||
| response = client.public_send("get", "/api/sources/get_user_info_by_login", req_params) | |||
| result = JSON.parse(response.body) | |||
| #查询 | |||
| return nil if result["status"].to_s != "0" | |||
| # login 邮箱 手机号 姓名 学校/单位 | |||
| user_info = result["data"] | |||
| Rails.logger.info("user_info====== #{user_info}") | |||
| login = user_info["login"] | |||
| email = user_info["mail"] | |||
| phone = user_info["phone"] | |||
| real_name = user_info["username"] | |||
| department_name = user_info["school"] | |||
| # 没有用户时,新建用户并登录 | |||
| user = User.where("login = ? or phone = ? or mail = ? ", "#{login}", phone, email).first | |||
| if user.present? | |||
| # 手机号先记录,后续用 | |||
| user.update_column(:phone, "#{phone}") if phone.present? | |||
| else | |||
| ActiveRecord::Base.transaction do | |||
| email = "#{login}@gitlink.org.cn" if email.blank? | |||
| user_params = { status: 1, type: 'User', login: "#{login}", lastname: "#{real_name}", mail: "#{email}", | |||
| nickname: "#{real_name}", professional_certification: 0, certification: 0, grade: 0, | |||
| password: "12345678", phone: "#{phone}", profile_completed: 1 } | |||
| user = User.create!(user_params) | |||
| UserExtension.create!(user_id: user.id, gender: 1, custom_department: "#{department_name}") | |||
| interactor = Gitea::RegisterInteractor.call({username: login, email: email, password: "12345678"}) | |||
| if interactor.success? | |||
| else | |||
| ActiveRecord::Base.transaction do | |||
| phone_rand = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].sample(4).join | |||
| user_params = { status: 1, type: 'User', login: "#{login}", lastname: "#{real_name}", mail: "#{email}", | |||
| nickname: "#{real_name}", professional_certification: 0, certification: 0, grade: 0, | |||
| password: "12345678", phone: "#{phone_rand}", profile_completed: 1 } | |||
| user = User.create!(user_params) | |||
| UserExtension.create!(user_id: user.id, gender: 1, custom_department: "#{department_name}") | |||
| end | |||
| Rails.logger.info("Gitea::RegisterInteractor.call error====== #{interactor.error}") | |||
| end | |||
| successful_authentication(user) | |||
| end | |||
| end | |||
| successful_authentication(user) if user.present? | |||
| end | |||
| end | |||