diff --git a/models/issue_assignees.go b/models/issue_assignees.go
index e15b718eb2..70bed039c2 100644
--- a/models/issue_assignees.go
+++ b/models/issue_assignees.go
@@ -7,6 +7,8 @@ package models
 import (
 	"fmt"
 
+	"code.gitea.io/gitea/modules/util"
+
 	"xorm.io/xorm"
 )
 
@@ -171,25 +173,20 @@ func toggleUserAssignee(e *xorm.Session, issue *Issue, assigneeID int64) (remove
 // MakeIDsFromAPIAssigneesToAdd returns an array with all assignee IDs
 func MakeIDsFromAPIAssigneesToAdd(oneAssignee string, multipleAssignees []string) (assigneeIDs []int64, err error) {
 
+	var requestAssignees []string
+
 	// Keeping the old assigning method for compatibility reasons
-	if oneAssignee != "" {
+	if oneAssignee != "" && !util.IsStringInSlice(oneAssignee, multipleAssignees) {
+		requestAssignees = append(requestAssignees, oneAssignee)
+	}
 
-		// Prevent double adding assignees
-		var isDouble bool
-		for _, assignee := range multipleAssignees {
-			if assignee == oneAssignee {
-				isDouble = true
-				break
-			}
-		}
-
-		if !isDouble {
-			multipleAssignees = append(multipleAssignees, oneAssignee)
-		}
+	//Prevent empty assignees
+	if len(multipleAssignees) > 0 && multipleAssignees[0] != "" {
+		requestAssignees = append(requestAssignees, multipleAssignees...)
 	}
 
 	// Get the IDs of all assignees
-	assigneeIDs, err = GetUserIDsByNames(multipleAssignees, false)
+	assigneeIDs, err = GetUserIDsByNames(requestAssignees, false)
 
 	return
 }
diff --git a/models/issue_assignees_test.go b/models/issue_assignees_test.go
index 163234b167..79257013f8 100644
--- a/models/issue_assignees_test.go
+++ b/models/issue_assignees_test.go
@@ -59,3 +59,24 @@ func TestUpdateAssignee(t *testing.T) {
 	assert.NoError(t, err)
 	assert.False(t, isAssigned)
 }
+
+func TestMakeIDsFromAPIAssigneesToAdd(t *testing.T) {
+	IDs, err := MakeIDsFromAPIAssigneesToAdd("", []string{""})
+	assert.NoError(t, err)
+	assert.Equal(t, []int64{}, IDs)
+
+	IDs, err = MakeIDsFromAPIAssigneesToAdd("", []string{"none_existing_user"})
+	assert.Error(t, err)
+
+	IDs, err = MakeIDsFromAPIAssigneesToAdd("user1", []string{"user1"})
+	assert.NoError(t, err)
+	assert.Equal(t, []int64{1}, IDs)
+
+	IDs, err = MakeIDsFromAPIAssigneesToAdd("user2", []string{""})
+	assert.NoError(t, err)
+	assert.Equal(t, []int64{2}, IDs)
+
+	IDs, err = MakeIDsFromAPIAssigneesToAdd("", []string{"user1", "user2"})
+	assert.NoError(t, err)
+	assert.Equal(t, []int64{1, 2}, IDs)
+}
diff --git a/models/user_test.go b/models/user_test.go
index bcb955817c..f3952422af 100644
--- a/models/user_test.go
+++ b/models/user_test.go
@@ -373,3 +373,16 @@ func TestCreateUser_Issue5882(t *testing.T) {
 		assert.NoError(t, DeleteUser(v.user))
 	}
 }
+
+func TestGetUserIDsByNames(t *testing.T) {
+
+	//ignore non existing
+	IDs, err := GetUserIDsByNames([]string{"user1", "user2", "none_existing_user"}, true)
+	assert.NoError(t, err)
+	assert.Equal(t, []int64{1, 2}, IDs)
+
+	//ignore non existing
+	IDs, err = GetUserIDsByNames([]string{"user1", "do_not_exist"}, false)
+	assert.Error(t, err)
+	assert.Equal(t, []int64(nil), IDs)
+}