diff --git a/google.go b/google.go index 7885f58e..8b971149 100644 --- a/google.go +++ b/google.go @@ -51,7 +51,9 @@ func EnableGoogleLogin(app *aero.Application) { // Auth Callback app.Get("/auth/google/callback", func(ctx *aero.Context) string { - if ctx.Session().ID() != ctx.Query("state") { + session := ctx.Session() + + if session.ID() != ctx.Query("state") { return ctx.Error(http.StatusUnauthorized, "Authorization not allowed for this session", errors.New("Google login failed: Incorrect state")) } @@ -88,7 +90,7 @@ func EnableGoogleLogin(app *aero.Application) { return ctx.Error(http.StatusForbidden, "Email not registered", err) } - ctx.Session().Set("userId", user.ID) + session.Set("userId", user.ID) return ctx.Redirect("/") }) diff --git a/main.go b/main.go index de2bd706..6fbabb12 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,7 @@ package main import ( "github.com/aerogo/aero" + "github.com/animenotifier/arn" "github.com/animenotifier/notify.moe/components" "github.com/animenotifier/notify.moe/pages/airing" "github.com/animenotifier/notify.moe/pages/anime" @@ -35,6 +36,20 @@ func main() { // HTTPS app.Security.Load("security/fullchain.pem", "security/privkey.pem") + // Session store + app.Sessions.Store = arn.NewAerospikeStore("Session") + + // Session middleware + app.Use(func(ctx *aero.Context, next func()) { + // Handle the request first + next() + + // Update session if it has been modified + if ctx.HasSession() && ctx.Session().Modified() { + app.Sessions.Store.Set(ctx.Session().ID(), ctx.Session()) + } + }) + // Layout app.Layout = func(ctx *aero.Context, content string) string { return components.Layout(content)