尝试将实体放入数据存储区似乎只放置一个键而不是我想到的相关属性

时间:2016-06-08 01:01:18

标签: google-app-engine go google-cloud-datastore

这是我尝试使用email属性插入实体的地方。在浏览器中,U可以看到已收到db_success。在数据存储区查看器中,我可以看到实体是通过2次写入插入的,这种写入非常低,浏览到实体我可以看到实体种类,实体密钥和ID,但没有别的:

    c := appengine.NewContext(r)
    u := user.Current(c)

    if u == nil || !user.IsAdmin(c) {
        return
    }

    addrmv := r.FormValue("addrmv")
    user_email := r.FormValue("user_email")
    if addrmv == "add" {
        if user_email == "" {
            return
        }
        uemail := uemail_struct{
            user_email: user_email,
        }
        _,err :=    datastore.Put(c,datastore.NewIncompleteKey(c,"users",nil),&uemail)
        if err != nil {
            io.WriteString(w, "\"result\":\"db_error\"")
        } else {
            io.WriteString(w, "\"result\":\"db_success\"")
        }
    } else if addrmv == "rmv"{
        return
        //TODO expand
    }

另一段代码是我想根据电子邮件限制用户访问的地方。我尝试在我之前插入的实体的电子邮件属性上执行数据存储查询,并将授权帐户重定向到预期页面,将未经授权的帐户重新定向到应用程序条目URL:

c := appengine.NewContext(r)
u := user.Current(c)
if u == nil {
    http.Redirect(w, r, "/", http.StatusSeeOther)
} else if user.IsAdmin(c) {
    io.WriteString(w, admins_choice_html)
} else {
    var emails []uemail_struct
    q := datastore.NewQuery("users").Filter("user_email =", u.Email)
    _,err := q.GetAll(c,&emails)
    if err != nil {
        http.Redirect(w, r, "/", http.StatusSeeOther)
    }
    if len(emails) == 0 {
        url, err := user.LogoutURL(c, "/")
        if err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }
        w.Header().Set("Location", url)
        w.WriteHeader(http.StatusFound)

    } else {
        http.Redirect(w, r, "/dist/index.html", http.StatusSeeOther)
    }
}

我确信我的测试数据和添加用户电子邮件的功能都可以。这意味着我执行了数据user@example.com电子邮件地址的第一段代码,并执行了相同user@example.com电子邮件地址的第二段代码。我可以得出的唯一结论是,第一段代码中的数据存储区没有在数据存储区中插入值为user@email.com的必需属性user_email。

1 个答案:

答案 0 :(得分:1)

我发现问题只是他们定义我的结构的方式。而不是

type uemail_struct{
    user_email string
}

简单地写

type Uemail_struct{
    User_email string
}

修复程序,现在添加新用户及其登录工作。