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.
52 lines
1.2 KiB
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, "/")
|
|
}
|
|
|