gpt4 book ai didi

go - 无法访问 Golang 中的登录页面

转载 作者:数据小太阳 更新时间:2023-10-29 03:39:33 25 4
gpt4 key购买 nike

我是 Golang 的新手。我制作了一个用于练习的演示应用程序,其中我有登录注册和主页。当我进入登录页面时,它会重定向到主页。我不明白发生了什么。

这是我的代码

package main

import (
"database/sql"
"fmt"
"net/http"

_ "github.com/go-sql-driver/mysql"
"golang.org/x/crypto/bcrypt"
)

var db *sql.DB
var err error

func signupPage(res http.ResponseWriter, req *http.Request) {
fmt.Println("entered Signup")
if req.Method != "POST" {
http.ServeFile(res, req, "template/signup.html")
return
}

email := req.FormValue("email")
password := req.FormValue("password")

var user string

err := db.QueryRow("SELECT email FROM users WHERE email=?", email).Scan(&user)

switch {
case err == sql.ErrNoRows:
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
if err != nil {
http.Error(res, "Server error, unable to create your account.", 500)
return
}

_, err = db.Exec("INSERT INTO users(email, password) VALUES(?, ?)", email, hashedPassword)
if err != nil {
http.Error(res, "Server error, unable to create your account.", 500)
}
res.Write([]byte("User Registered Successfully"))
return

case err != nil:
http.Error(res, "Server error, unable to create your account.", 500)
return

default:
http.Redirect(res, req, "/", 301)
}

}

func loginPage(res http.ResponseWriter, req *http.Request) {
fmt.Println("Entered login")
if req.Method != "POST" {
http.ServeFile(res, req, "template/login.html")
return
}

email := req.FormValue("email")
password := req.FormValue("password")

var dbemail string
var dbpassword string

err := db.QueryRow("SELECT email, password FORM users WHERE email=?", email).Scan(&dbemail, &dbpassword)
if err != nil {
http.Redirect(res, req, "/login", 301)
return
}

err = bcrypt.CompareHashAndPassword([]byte(dbpassword), []byte(password))
if err != nil {
http.Redirect(res, req, "/login", 301)
return
}

res.Write([]byte("Hello" + dbemail))

}

func homePage(res http.ResponseWriter, req *http.Request) {
http.ServeFile(res, req, "template/landing.html")
}

func main() {
db, err = sql.Open("mysql", "root:password@/golang_demo")
if err != nil {
panic(err.Error())
} else {
fmt.Println("Database connected successfully")
}
defer db.Close()

err = db.Ping()
if err != nil {
panic(err.Error())
}
http.HandleFunc("/login", loginPage)
http.HandleFunc("/", homePage)
http.HandleFunc("/signup", signupPage)

http.ListenAndServe(":9090", nil)
}

当我进入注册页面时,它成功了。但是当我进入登录页面时,它会将我重定向到主页。请帮忙!

最佳答案

这只是一个有根据的猜测,因为从我看到的代码来看,这似乎不应该发生。由于您正在使用 301 重定向(永久移动),我猜想在某个时候编写您的函数并对其进行测试时,您重定向到了主页。由于它是“永久移动”的,浏览器现在甚至不询问服务器在看到该 URL 时是否应该重定向,它只是这样做了。

如果您使用的是 chrome,请打开开发工具,然后禁用缓存应该可以解决该问题。或者更好的是,在您尚未在此站点上使用过的其他浏览器中尝试它,看看它是否在那里工作。

关于go - 无法访问 Golang 中的登录页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54576799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com