func (u *User) Login(w http.ResponseWriter, r *http.Request) (LoginReturn, error) { type Message struct { Email string `json:"email"` Password string `json:"password"` } var m Message decoder := json.NewDecoder(r.Body) err := decoder.Decode(&m) if err != nil { //handle err log.Println(err) } userModel := model.User{} userModel.Email = m.Email //find user user, err := userModel.GetLoginData(w, r) if err != nil { //handle err return LoginReturn{}, err } //match passwords err = bcrypt.CompareHashAndPassword([]byte(user.Password), []byte(m.Password)) if err != nil { //passwords don't match return LoginReturn{}, err } //everything checks out! var l LoginReturn l = LoginReturn{ Id: user.Id, Role: user.Role, } return l, nil }