为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
紫衣仙女 2023-05-08 17:57:42
我有一个小型的 Go 网络服务器,可以在用户登录时向他们显示数据。我试图实现的问题是让网页仅在特定用户登录时显示某些信息。例如,当管理员登录时,会有一个他们可以在网络上看到的仅限管理员的项目列表-页。我遇到的问题是由于某种原因我的 Go 代码没有将用户名存储在我调用的数组中,所以当我将它传递给 JavaScript 时它是空白的。以下是我正在努力处理的代码的 3 个主要部分:main.gopackage mainimport "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 rangegoroutine 26 [running]:net/http.(*conn).serve.func1(0xc42009f720)        C:/Go/src/net/http/server.go:1726 +0xd0panic(0x79f820, 0xe17940)        C:/Go/src/runtime/panic.go:502 +0x229main.authHandler(0xc56220, 0xc420135180, 0xc4207a3500)        D:/src/main.go:346 +0x1d8所以很明显 usernameArray 是空的,不知道我做错了什么。谁能帮我告诉我为什么 authHandler 中的 usernameArray 为空?
查看完整描述

1 回答

?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

首先,我可以看到您GET在没有查询参数的情况下向服务器发送请求j_username,因此您无法j_username在服务器端读取。


第二个usernameArray是空切片,它在 parse 时失败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)


查看完整回答
反对 回复 2023-05-08
  • 1 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信