Checking to see if a user is logged in, and logging a user our

This commit is contained in:
vinchent 2024-07-22 10:00:17 +02:00
parent a0853cf880
commit 96f81418ec
5 changed files with 26 additions and 9 deletions

View File

@ -32,6 +32,7 @@ func routes(app *config.AppConfig) http.Handler {
mux.Get("/book-room", handlers.Repo.BookRoom) mux.Get("/book-room", handlers.Repo.BookRoom)
mux.Get("/user/login", handlers.Repo.ShowLogin) mux.Get("/user/login", handlers.Repo.ShowLogin)
mux.Post("/user/login", handlers.Repo.PostShowLogin) mux.Post("/user/login", handlers.Repo.PostShowLogin)
mux.Get("/user/logout", handlers.Repo.Logout)
fileServer := http.FileServer(http.Dir("./static/")) fileServer := http.FileServer(http.Dir("./static/"))
mux.Handle("/static/*", http.StripPrefix("/static", fileServer)) mux.Handle("/static/*", http.StripPrefix("/static", fileServer))

View File

@ -494,3 +494,11 @@ func (m *Repository) PostShowLogin(w http.ResponseWriter, r *http.Request) {
m.App.Session.Put(r.Context(), "flash", "Logged in successfully") m.App.Session.Put(r.Context(), "flash", "Logged in successfully")
http.Redirect(w, r, "/", http.StatusSeeOther) http.Redirect(w, r, "/", http.StatusSeeOther)
} }
// Logout logs a user out
func (m *Repository) Logout(w http.ResponseWriter, r *http.Request) {
// TODO Use Redis to store the session. Check the documentation of scs package
m.App.Session.Destroy(r.Context())
m.App.Session.RenewToken(r.Context())
http.Redirect(w, r, "/user/login", http.StatusSeeOther)
}

View File

@ -4,13 +4,14 @@ import "go-udemy-web-1/internal/forms"
// TemplateData holds data sent from handlers to templates // TemplateData holds data sent from handlers to templates
type TemplateData struct { type TemplateData struct {
StringMap map[string]string StringMap map[string]string
IntMap map[string]int IntMap map[string]int
FloatMap map[string]float32 FloatMap map[string]float32
Data map[string]interface{} Data map[string]interface{}
CSRFToken string Form *forms.Form
Flash string CSRFToken string
Warning string Flash string
Error string Warning string
Form *forms.Form Error string
IsAuthenticated int
} }

View File

@ -32,6 +32,9 @@ func AddDefaultData(td *models.TemplateData, r *http.Request) *models.TemplateDa
td.Warning = app.Session.PopString(r.Context(), "warning") td.Warning = app.Session.PopString(r.Context(), "warning")
td.Error = app.Session.PopString(r.Context(), "error") td.Error = app.Session.PopString(r.Context(), "error")
td.CSRFToken = nosurf.Token(r) td.CSRFToken = nosurf.Token(r)
if app.Session.Exists(r.Context(), "user_id") {
td.IsAuthenticated = 1
}
return td return td
} }

View File

@ -51,7 +51,11 @@
<a class="nav-link" href="/contact">Contact</a> <a class="nav-link" href="/contact">Contact</a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
{{if eq .IsAuthenticated 1}}
<a class="nav-link" href="/user/logout">Logout</a>
{{else}}
<a class="nav-link" href="/user/login">Login</a> <a class="nav-link" href="/user/login">Login</a>
{{end}}
</li> </li>
</ul> </ul>
</div> </div>