You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
devops/routes/do_login.go

52 lines
1.2 KiB

package routes
import (
"devops/entities"
"errors"
"net/http"
"gorm.io/gorm"
"zestack.dev/misc"
"zestack.dev/slim"
)
func handleLogin(c slim.Context) error {
var req struct {
Username string `json:"username" form:"username"`
Password string `json:"password" form:"password"`
}
if err := c.Bind(&req); err != nil {
return err
}
if req.Username == "" {
return c.Redirect(http.StatusMovedPermanently, "/login?error=用户名不能为空")
}
if req.Password == "" {
return c.Redirect(http.StatusMovedPermanently, "/login?error=登录密码不能为空")
}
var user entities.User
err := db.
Model(&entities.User{}).
Where("username", req.Username).
First(&user).
Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return c.Redirect(http.StatusMovedPermanently, "/login?error=用户名或密码错误")
}
return err
}
if !misc.PasswordVerify(req.Password, user.Password) {
return c.Redirect(http.StatusMovedPermanently, "/login?error=用户名或密码错误")
}
sess, err := store.Get(c.Request(), "session-key")
if err != nil {
return err
}
sess.Values["user"] = &user
err = sess.Save(c.Request(), c.Response())
if err != nil {
return err
}
return c.Redirect(http.StatusMovedPermanently, "/")
}