Хранить имя пользователя в массиве от логина до сервера - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть небольшой веб-сервер Go, который отображает данные для пользователей при входе в систему. Проблема, которую я пытаюсь решить, состоит в том, чтобы на веб-странице отображалась только определенная информация при входе в систему конкретного пользователя. Например, при входе администратора в систему будет отображаться список элементов только для администратора, которые они могут видеть в Интернете. -page.

Проблема, с которой я столкнулся, заключается в том, что мой код Go не хранит имя пользователя в массиве, который я вызываю, поэтому, когда я передаю его в JavaScript, оно пустое.

Вот три основных части кода, с которыми я борюсь:

main.go

package main

import "fmt"

func authHandler(w http.ResponseWriter, r *http.Request) {
    r.ParseForm()
    usernameArray, hasUsername := r.PostForm["j_username"]

    //This line added for debugging purposes
    log.Println("username:", usernameArray[0])

    if hasUsername {
        fmt.Fprintf(w, "%s", usernameArray[0])
    }
}

func main() {
    http.HandleFunc("/getAuth", authHandler)
}

javascript.js

Обратите внимание, что это AngularJS

$scope.init = function() {
    checkAuthentication();
};

checkAuthentication = function() {
    $http.get("/getAuth").then(
    function(response) {
        var username = response.data;

        console.log(username): //Added for debugging purposes

        if (username === "admin") {
            $scope.showAdminOnlyItems = true;
        }
    });
}

main.html

<div id="admin-only-items" ng-show="showAdminOnlyItems">
    <hr style="border:1px solid">
    <p style="text-align: center">admin only: </p>
    <div id="adminOnlyButtom">
        <button class="button" data-ng-click="doSomething()">Do something</button>
    </div>
</div>

Опять же, я хочу, чтобы этот div отображался только при входе администратора, и Go должен отправить имя пользователя в javascript, чтобы убедиться в этом. Добавив строку отладки в Go и запустив сервер, я получаю следующее:

2018/11/19 16:28:42 http: panic serving 10.240.49.238:59621: runtime error: 
index out of range
goroutine 26 [running]:
net/http.(*conn).serve.func1(0xc42009f720)
        C:/Go/src/net/http/server.go:1726 +0xd0
panic(0x79f820, 0xe17940)
        C:/Go/src/runtime/panic.go:502 +0x229
main.authHandler(0xc56220, 0xc420135180, 0xc4207a3500)
        D:/src/main.go:346 +0x1d8

Так что понятно, что usernameArray пуст, не уверен, что я сделал не так. Может кто-нибудь помочь мне сказать, почему usernameArray пуст в authHandler?

1 Ответ

0 голосов
/ 20 ноября 2018

Во-первых, я вижу, что вы отправляете запрос GET на сервер без j_username параметра запроса, поэтому вы не можете прочитать j_username на стороне сервера.

Второй, usernameArray - пустой срез, который завершается ошибкой при разборе j_username.Ошибка index out of range возникает при попытке вызвать usernameArray[0].

Вам необходимо отправить GET запрос с j_username, как этот /getAuth?j_username=admin и изменить код с сервера.

    usernameArray, hasUsername := r.URL.Query()["j_username"]
    //This line added for debugging purposes
    log.Println("debug here :", usernameArray)

    if hasUsername {
        fmt.Fprintf(w, "%s", usernameArray[0])
        return
    }

    // Send an error message to client
    http.Error(w, `missing username`, 500)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...