From c4578b6d48afc1f9e601dd70cb47252a9efb64ba Mon Sep 17 00:00:00 2001 From: p31729568 Date: Thu, 17 Oct 2019 10:52:58 +0800 Subject: [PATCH] open user: unbind api --- app/controllers/users/open_users_controller.rb | 13 +++++++++++++ app/models/open_user.rb | 2 ++ app/models/open_users/qq.rb | 6 ++++++ app/models/open_users/wechat.rb | 6 ++++++ .../oauth/create_or_find_qq_account_service.rb | 2 +- .../oauth/create_or_find_wechat_account_service.rb | 2 +- app/views/users/accounts/show.json.jbuilder | 6 ++++++ config/routes.rb | 1 + .../20191017024643_add_extra_to_open_users.rb | 5 +++++ 9 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 app/controllers/users/open_users_controller.rb create mode 100644 db/migrate/20191017024643_add_extra_to_open_users.rb diff --git a/app/controllers/users/open_users_controller.rb b/app/controllers/users/open_users_controller.rb new file mode 100644 index 000000000..5534b862b --- /dev/null +++ b/app/controllers/users/open_users_controller.rb @@ -0,0 +1,13 @@ +class Users::third_parties_controller < Users::BaseAccountController + def destroy + current_open_users.destroy! + + render_ok + end + + private + + def current_open_users + @_current_third_party ||= observed_user.open_users.find(params[:id]) + end +end \ No newline at end of file diff --git a/app/models/open_user.rb b/app/models/open_user.rb index 91228b976..45c4ee6ba 100644 --- a/app/models/open_user.rb +++ b/app/models/open_user.rb @@ -3,6 +3,8 @@ class OpenUser < ApplicationRecord validates :uid, presence: true, uniqueness: { scope: :type } + serialize :extra, JSON + def can_bind_cache_key "open_user:#{type}:#{uid}:can_bind" end diff --git a/app/models/open_users/qq.rb b/app/models/open_users/qq.rb index 242693ce5..9e7827128 100644 --- a/app/models/open_users/qq.rb +++ b/app/models/open_users/qq.rb @@ -1,3 +1,9 @@ class OpenUsers::QQ < OpenUser + def nickname + extra&.[]('nickname') + end + def en_type + 'qq' + end end \ No newline at end of file diff --git a/app/models/open_users/wechat.rb b/app/models/open_users/wechat.rb index 046b3e086..aadc9e78c 100644 --- a/app/models/open_users/wechat.rb +++ b/app/models/open_users/wechat.rb @@ -1,3 +1,9 @@ class OpenUsers::Wechat < OpenUser + def nickname + extra&.[]('nickname') + end + def en_type + 'qq' + end end \ No newline at end of file diff --git a/app/services/oauth/create_or_find_qq_account_service.rb b/app/services/oauth/create_or_find_qq_account_service.rb index 691764ea2..200d436ef 100644 --- a/app/services/oauth/create_or_find_qq_account_service.rb +++ b/app/services/oauth/create_or_find_qq_account_service.rb @@ -28,7 +28,7 @@ class Oauth::CreateOrFindQqAccountService < ApplicationService user.create_user_extension!(gender: gender) end - new_open_user = OpenUsers::QQ.create!(user: user, uid: params['uid']) + new_open_user = OpenUsers::QQ.create!(user: user, uid: params['uid'], extra: params.dig('extra', 'raw_info')) Rails.cache.write(new_open_user.can_bind_cache_key, 1, expires_in: 1.hours) if new_user # 方便后面进行账号绑定 end diff --git a/app/services/oauth/create_or_find_wechat_account_service.rb b/app/services/oauth/create_or_find_wechat_account_service.rb index 0313054b7..372e55900 100644 --- a/app/services/oauth/create_or_find_wechat_account_service.rb +++ b/app/services/oauth/create_or_find_wechat_account_service.rb @@ -39,7 +39,7 @@ class Oauth::CreateOrFindWechatAccountService < ApplicationService Util.download_file(result['headimgurl'], avatar_path) end - new_open_user= OpenUsers::Wechat.create!(user: user, uid: result['unionid']) + new_open_user= OpenUsers::Wechat.create!(user: user, uid: result['unionid'], extra: result) Rails.cache.write(new_open_user.can_bind_cache_key, 1, expires_in: 1.hours) if new_user # 方便后面进行账号绑定 end diff --git a/app/views/users/accounts/show.json.jbuilder b/app/views/users/accounts/show.json.jbuilder index 48d69924c..cc6890f68 100644 --- a/app/views/users/accounts/show.json.jbuilder +++ b/app/views/users/accounts/show.json.jbuilder @@ -27,3 +27,9 @@ json.base_info_completed user.profile_completed? json.all_certified user.all_certified? json.has_password user.hashed_password.present? + +json.open_users do + json.array! user.open_users do |open_user| + json.extract! open_user, :id, :en_type, :nickname + end +end diff --git a/config/routes.rb b/config/routes.rb index 09c821766..db9502ae4 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -116,6 +116,7 @@ Rails.application.routes.draw do resource :auth_attachment, only: [:create] resource :authentication_apply, only: [:create] resource :professional_auth_apply, only: [:create] + resources :open_users, only: [:destroy] end end end diff --git a/db/migrate/20191017024643_add_extra_to_open_users.rb b/db/migrate/20191017024643_add_extra_to_open_users.rb new file mode 100644 index 000000000..b2e38c427 --- /dev/null +++ b/db/migrate/20191017024643_add_extra_to_open_users.rb @@ -0,0 +1,5 @@ +class AddExtraToOpenUsers < ActiveRecord::Migration[5.2] + def change + add_column :open_users, :extra, :text + end +end