I am writing my first server in golang. I have a login form that users will fill out and I want to show messages on the page without reloading.
What I have until now:
- index.tmpl
<form class="form-horizontal" role="form" action="/auth/login" method="POST">
<div class="form-group">
<div class="col-sm-2">
<label for="inputEmail" class="control-label">Email</label>
</div>
<div class="col-sm-10">
<input type="email" name="email" class="form-control input-lg" id="inputEmail" placeholder="Email">
</div>
</div>
<div class="form-group">
<div class="col-sm-2">
<label for="inputPassword" class="control-label">Password</label>
</div>
<div class="col-sm-10">
<input type="password" name="password" class="form-control input-lg" id="inputPassword" placeholder="Password">
</div>
</div>
<div class="form-group">
<div class="col-sm-12">
<label for="message" class="control-label text-danger">{{ .message }}</label>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default btn-lg">Sign in</button>
</div>
</div>
</form>
Here, I have a placeholder for message where I want to print all my error messages.
- server.go
if _, ok := resp.Item["Email"]; ok {
if *resp.Item["Email"].S == form.Email && *resp.Item["Password"].S == form.Password {
var bucketlist []string
for _, dataset := range resp.Item["Datasets"].SS {
bucketlist = append(bucketlist, *dataset)
}
log.Info("User password and email match")
c.HTML(http.StatusOK, "bucketlist.tmpl", gin.H{
"bucketlist": bucketlist,
})
} else {
log.Info("Failure authorizing user: Invalid login")
c.HTML(http.StatusUnauthorized, "index.tmpl", gin.H{
"message": "Invalid login information.",
})
}
} else {
log.Info("Failure authorizing user: Invalid login")
c.HTML(http.StatusUnauthorized, "index.tmpl", gin.H{
"message": "Invalid login information.",
})
}
}
} else {
log.Info("Failure authorizing user: No input provided")
c.HTML(http.StatusUnauthorized, "index.tmpl", gin.H{
"message": "Please fill the form with valid login information.",
})
}
Here, I am handling errors and printing to {{ .message }} placeholder in index.tmpl. If I put in a wrong password, I want the webpage to update the placeholder without reloading the whole page. Is there a way to do that? If there is, a point in the right direction would be greatly appreciated.