Add login prompt for game invite links
When unauthenticated users visit a game invite link, show a prompt with options to log in, register, or continue as guest. After login/register, redirect back to the original game URL.
This commit is contained in:
54
main.go
54
main.go
@@ -142,7 +142,14 @@ func main() {
|
||||
c.Session().Set("user_id", user.ID)
|
||||
c.Session().Set("username", user.Username)
|
||||
c.Session().Set("nickname", user.Username)
|
||||
c.Redirect("/")
|
||||
|
||||
returnURL := c.Session().GetString("return_url")
|
||||
if returnURL != "" {
|
||||
c.Session().Set("return_url", "")
|
||||
c.Redirect(returnURL)
|
||||
} else {
|
||||
c.Redirect("/")
|
||||
}
|
||||
})
|
||||
|
||||
c.View(func() h.H {
|
||||
@@ -203,7 +210,14 @@ func main() {
|
||||
c.Session().Set("user_id", user.ID)
|
||||
c.Session().Set("username", user.Username)
|
||||
c.Session().Set("nickname", user.Username)
|
||||
c.Redirect("/")
|
||||
|
||||
returnURL := c.Session().GetString("return_url")
|
||||
if returnURL != "" {
|
||||
c.Session().Set("return_url", "")
|
||||
c.Redirect(returnURL)
|
||||
} else {
|
||||
c.Redirect("/")
|
||||
}
|
||||
})
|
||||
|
||||
c.View(func() h.H {
|
||||
@@ -226,6 +240,22 @@ func main() {
|
||||
|
||||
nickname := c.Signal(sessionNickname)
|
||||
colSignal := c.Signal(0)
|
||||
showGuestPrompt := c.Signal(false)
|
||||
|
||||
goToLogin := c.Action(func() {
|
||||
c.Session().Set("return_url", "/game/"+gameID)
|
||||
c.Redirect("/login")
|
||||
})
|
||||
|
||||
goToRegister := c.Action(func() {
|
||||
c.Session().Set("return_url", "/game/"+gameID)
|
||||
c.Redirect("/register")
|
||||
})
|
||||
|
||||
continueAsGuest := c.Action(func() {
|
||||
showGuestPrompt.SetValue(true)
|
||||
c.Sync()
|
||||
})
|
||||
|
||||
var gi *game.GameInstance
|
||||
var gameExists bool
|
||||
@@ -326,6 +356,14 @@ func main() {
|
||||
|
||||
// Need nickname first / not joined yet
|
||||
if myColor == 0 {
|
||||
// Unauthenticated user who hasn't chosen to continue as guest
|
||||
if sessionUserID == "" && !showGuestPrompt.Bool() {
|
||||
return ui.GameJoinPrompt(
|
||||
goToLogin.OnClick(),
|
||||
continueAsGuest.OnClick(),
|
||||
goToRegister.OnClick(),
|
||||
)
|
||||
}
|
||||
return ui.NicknamePrompt(
|
||||
nickname.Bind(),
|
||||
setNickname.OnKeyDown("Enter"),
|
||||
@@ -643,4 +681,16 @@ const gameCSS = `
|
||||
font-size: 0.75rem;
|
||||
color: var(--pico-muted-color);
|
||||
}
|
||||
|
||||
.join-options {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 0.5rem;
|
||||
margin: 1rem 0;
|
||||
}
|
||||
|
||||
.register-link {
|
||||
font-size: 0.875rem;
|
||||
color: var(--pico-muted-color);
|
||||
}
|
||||
`
|
||||
|
||||
Reference in New Issue
Block a user