Skip to content

How to Perform Redirects in Gofr? #1531

Open
@ibadi-id

Description

@ibadi-id

I am trying to redirect users to a frontend URL after authentication in Gofr. However, I couldn't find a built-in Redirect method in ctx.

Here’s my current code:

app.GET("/auth/google/callback", func(ctx *gofr.Context) (interface{}, error) {
	sessionManager := session.GetSession()

	email := sessionManager.GetString(ctx.Context, "email")
	name := sessionManager.GetString(ctx.Context, "name")

	// Expected to redirect but ctx does not have a Redirect method
	frontendURL := fmt.Sprintf("https://frontend.com/dashboard?email=%s&name=%s", email, name)

	// What is the correct way to redirect?
	ctx.Redirect(frontendURL, http.StatusFound) // This does not exist in Gofr

	return nil, nil
})

Expected Behavior
A way to redirect users to the frontend URL after authentication.

Actual Behavior
ctx.Redirect() does not exist in Gofr. like in echo or Fiber
There is no clear documentation on how to handle redirects.

Questions
What is the correct way to redirect users in Gofr?
Is there an alternative method to set the Location header?

Activity

self-assigned this
on Feb 27, 2025
Umang01-hash

Umang01-hash commented on Feb 27, 2025

@Umang01-hash
Member

@ibadi-id GoFr doesn't support Redirects as of now. Will definitely let you know once we add it.

Umang01-hash

Umang01-hash commented on Feb 27, 2025

@Umang01-hash
Member

@ibadi-id Could you share more details on your use case for redirects? Understanding how you intend to use them will help us evaluate whether this should be part of GoFr or handled at the application level.

ibadi-id

ibadi-id commented on Feb 28, 2025

@ibadi-id
Author

Thank you for your response, @Umang01-hash

My use case is that after receiving a callback from Google as an authentication provider, I want to create a user in the backend and then redirect the user to a specific frontend page once the process is complete.

Since GoFr currently does not support redirects, I have implemented a temporary workaround by adding a function to retrieve http.ResponseWriter, allowing me to perform a redirect like this:

func (c *Context) GetWriter() http.ResponseWriter {
	if httpResponder, ok := c.responder.(*gofwhttp.Responder); ok {
		return httpResponder.GetWriter()
	}
	return nil
}

func CallbackAuth(ctx *gofw.Context) (interface{}, error) {
	// Redirect to the frontend after successful login
	redirectURL := fmt.Sprintf(os.Getenv("REDIRECT_FRONTEND_URL"))
	w := ctx.GetWriter()
        if writer != nil {
           http.Redirect(w, &http.Request{}, redirectURL, http.StatusFound)
        }
	return nil, nil
}

However, if there is a better way to handle redirects in GoFr or if there are plans to support this feature in the future, I would greatly appreciate any suggestions or insights.

Thanks! 😊

linked a pull request that will close this issue on Apr 10, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    How to Perform Redirects in Gofr? · Issue #1531 · gofr-dev/gofr