diff --git a/integrations/api_repo_test.go b/integrations/api_repo_test.go
index febdf31ef2e..64649efe1d1 100644
--- a/integrations/api_repo_test.go
+++ b/integrations/api_repo_test.go
@@ -21,3 +21,12 @@ func TestAPIUserReposNotLogin(t *testing.T) {
 	resp := MakeRequest(req)
 	assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
 }
+
+func TestAPISearchRepoNotLogin(t *testing.T) {
+	assert.NoError(t, models.LoadFixtures())
+
+	req, err := http.NewRequest("GET", "/api/v1/repos/search?q=Test", nil)
+	assert.NoError(t, err)
+	resp := MakeRequest(req)
+	assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
+}
diff --git a/integrations/view_test.go b/integrations/repo_test.go
similarity index 69%
rename from integrations/view_test.go
rename to integrations/repo_test.go
index 26d8348afef..37874c275dc 100644
--- a/integrations/view_test.go
+++ b/integrations/repo_test.go
@@ -19,12 +19,3 @@ func TestViewRepo(t *testing.T) {
 	resp := MakeRequest(req)
 	assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
 }
-
-func TestViewUser(t *testing.T) {
-	prepareTestEnv(t)
-
-	req, err := http.NewRequest("GET", "/user2", nil)
-	assert.NoError(t, err)
-	resp := MakeRequest(req)
-	assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
-}
diff --git a/integrations/user_test.go b/integrations/user_test.go
new file mode 100644
index 00000000000..f9358c16825
--- /dev/null
+++ b/integrations/user_test.go
@@ -0,0 +1,21 @@
+// Copyright 2017 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package integrations
+
+import (
+	"net/http"
+	"testing"
+
+	"github.com/stretchr/testify/assert"
+)
+
+func TestViewUser(t *testing.T) {
+	prepareTestEnv(t)
+
+	req, err := http.NewRequest("GET", "/user2", nil)
+	assert.NoError(t, err)
+	resp := MakeRequest(req)
+	assert.EqualValues(t, http.StatusOK, resp.HeaderCode)
+}
diff --git a/routers/api/v1/repo/repo.go b/routers/api/v1/repo/repo.go
index 0f22eaeb8f7..c0b8bb3d7b9 100644
--- a/routers/api/v1/repo/repo.go
+++ b/routers/api/v1/repo/repo.go
@@ -55,6 +55,11 @@ func Search(ctx *context.APIContext) {
 		return
 	}
 
+	var userID int64
+	if ctx.IsSigned {
+		userID = ctx.User.ID
+	}
+
 	results := make([]*api.Repository, len(repos))
 	for i, repo := range repos {
 		if err = repo.GetOwner(); err != nil {
@@ -64,7 +69,7 @@ func Search(ctx *context.APIContext) {
 			})
 			return
 		}
-		accessMode, err := models.AccessLevel(ctx.User.ID, repo)
+		accessMode, err := models.AccessLevel(userID, repo)
 		if err != nil {
 			ctx.JSON(500, map[string]interface{}{
 				"ok":    false,