猿问

将用户名存储在从登录到服务器的数组中

我有一个小型的 Go 网络服务器,可以在用户登录时向他们显示数据。我试图实现的问题是让网页仅在特定用户登录时显示某些信息。例如,当管理员登录时,会有一个他们可以在网络上看到的仅限管理员的项目列表-页。


我遇到的问题是由于某种原因我的 Go 代码没有将用户名存储在我调用的数组中,所以当我将它传递给 JavaScript 时它是空白的。


以下是我正在努力处理的代码的 3 个主要部分:


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 是空的,不知道我做错了什么。谁能帮我告诉我为什么 authHandler 中的 usernameArray 为空?


紫衣仙女
浏览 107回答 1
1回答

吃鸡游戏

首先,我可以看到您GET在没有查询参数的情况下向服务器发送请求j_username,因此您无法j_username在服务器端读取。第二个usernameArray是空切片,它在 parse 时失败j_username。index out of range尝试调用时发生错误usernameArray[0]。您应该这样发送GET请求并从服务器修改代码。j_username/getAuth?j_username=admin&nbsp; &nbsp; usernameArray, hasUsername := r.URL.Query()["j_username"]&nbsp; &nbsp; //This line added for debugging purposes&nbsp; &nbsp; log.Println("debug here :", usernameArray)&nbsp; &nbsp; if hasUsername {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Fprintf(w, "%s", usernameArray[0])&nbsp; &nbsp; &nbsp; &nbsp; return&nbsp; &nbsp; }&nbsp; &nbsp; // Send an error message to client&nbsp; &nbsp; http.Error(w, `missing username`, 500)
随时随地看视频慕课网APP

相关分类

Go
我要回答