mirror of https://gitee.com/answerdev/answer.git
feat(plugin): If user has only one external login and never set password, he can't unbind it
This commit is contained in:
parent
9c68284623
commit
b44824cf78
|
@ -130,6 +130,8 @@ backend:
|
|||
no_permission:
|
||||
other: No permission to Revision.
|
||||
user:
|
||||
external_login_unbinding_forbidden:
|
||||
other: Please set a login password for your account before you remove this login.
|
||||
email_or_password_wrong:
|
||||
other:
|
||||
other: Email and password do not match.
|
||||
|
|
|
@ -67,4 +67,5 @@ const (
|
|||
SMTPConfigFromNameCannotBeEmail = "error.smtp.config_from_name_cannot_be_email"
|
||||
AdminCannotUpdateTheirPassword = "error.admin.cannot_update_their_password"
|
||||
AdminCannotModifySelfStatus = "error.admin.cannot_modify_self_status"
|
||||
UserExternalLoginUnbindingForbidden = "error.user.external_login_unbinding_forbidden"
|
||||
)
|
||||
|
|
|
@ -210,6 +210,6 @@ func (cc *ConnectorController) ExternalLoginUnbinding(ctx *gin.Context) {
|
|||
|
||||
req.UserID = middleware.GetLoginUserIDFromContext(ctx)
|
||||
|
||||
err := cc.userExternalService.ExternalLoginUnbinding(ctx, req)
|
||||
handler.HandleResponse(ctx, err, nil)
|
||||
resp, err := cc.userExternalService.ExternalLoginUnbinding(ctx, req)
|
||||
handler.HandleResponse(ctx, err, resp)
|
||||
}
|
||||
|
|
|
@ -292,6 +292,24 @@ func (us *UserExternalLoginService) GetExternalLoginUserInfoList(
|
|||
|
||||
// ExternalLoginUnbinding external login unbinding
|
||||
func (us *UserExternalLoginService) ExternalLoginUnbinding(
|
||||
ctx context.Context, req *schema.ExternalLoginUnbindingReq) (err error) {
|
||||
return us.userExternalLoginRepo.DeleteUserExternalLogin(ctx, req.UserID, req.ExternalID)
|
||||
ctx context.Context, req *schema.ExternalLoginUnbindingReq) (resp any, err error) {
|
||||
// If user has only one external login and never set password, he can't unbind it.
|
||||
userInfo, exist, err := us.userRepo.GetByUserID(ctx, req.UserID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if !exist {
|
||||
return nil, errors.BadRequest(reason.UserNotFound)
|
||||
}
|
||||
if len(userInfo.Pass) == 0 {
|
||||
loginList, err := us.userExternalLoginRepo.GetUserExternalLoginList(ctx, req.UserID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(loginList) <= 1 {
|
||||
return schema.ErrTypeToast, errors.BadRequest(reason.UserExternalLoginUnbindingForbidden)
|
||||
}
|
||||
}
|
||||
|
||||
return nil, us.userExternalLoginRepo.DeleteUserExternalLogin(ctx, req.UserID, req.ExternalID)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue