Невозможно получить доступ к странице входа в Golang - PullRequest
0 голосов
/ 07 февраля 2019

Я новичок в Голанге.Я сделал демонстрационное приложение для практики, в котором у меня есть логин, регистрация и домашняя страница.Когда я иду на страницу входа, он перенаправляет на домашнюю страницу.Я не понимаю, что происходит.

Это мой код доступа

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)
}

Когда я перехожу на страницу регистрации, она проходит успешно.Но когда я захожу на страницу входа, он перенаправляет меня на домашнюю страницу.Пожалуйста, помогите!

1 Ответ

0 голосов
/ 07 февраля 2019

Это просто обоснованное предположение, поскольку из кода, который я вижу, не похоже, что это должно произойти.Поскольку вы используете 301 перенаправления (перемещены постоянно), я бы предположил, что при некотором пункте при написании вашей функции и ее тестировании вы сделали перенаправление на домашнюю страницу.Поскольку он «перемещен навсегда», браузер теперь даже не спрашивает сервер, следует ли ему перенаправить при просмотре этого URL, он просто делает это.

Если вы работаете в Chrome, откройте инструменты разработчикаи отключение кеша должно разрешить это.Или, что еще лучше, попробуйте его в другом браузере, который еще не использовался на этом сайте, и посмотрите, работает ли он там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...