ruby-china/homeland

已删除用户影响 GitHub 登录绑定

chunlea opened this issue · 2 comments

我的 GitHub 账号登录 Ruby China 每次都会登录 https://ruby-china.org/chunlea-github 这个账号,但是这个账号跟我已经在用的账号(https://ruby-china.org/chunlea)是两个独立账号。并且我目前在用的账号的登录邮箱跟 GitHub 的主邮箱是一致的。所以导致我无法绑定 GitHub 登录到我已经使用的账号上。

从代码上看,现在用户是软删的,

def match_email_or_create_user
user = User.find_by_email(email)
unless user
user_params = {
email: email,
name: name,
login: Homeland::Username.sanitize(username || name),
password: Devise.friendly_token[0, 20]
}
user = User.new(user_params)
if !user.valid?
user.login += "-#{external_id}"
end
user.save!
end
sso_record = user.sso || user.create_sso(
last_payload: unsigned_payload,
uid: external_id,
username: username,
email: email,
name: name,
avatar_url: avatar_url
)
sso_record.last_payload = unsigned_payload
sso_record.uid = external_id
user
end
end
这个地方也是有根据邮箱地址进行 match 用户的操作。但是删除用户的时候,没有删除对应的 UserSSO 导致每次登录都会登录到之前绑定的但是已经删除的用户。

def destroy
current_password = params[:user][:current_password]
unless @user.valid_password?(current_password)
@user.errors.add(:current_password, :invalid)
render "show"
return
end
@user.soft_delete
sign_out
redirect_to root_path, notice: "账号删除成功。"
end

我先把账号恢复了,你现在可以绑定了

绑定成功了,我发现登陆之后可以看到解绑 GitHub 登陆,但是按钮的 icon 可能迷惑了我。解绑之后重新登陆可以绑定。感谢。