Conditional redirection in Next.js

Yanis Urbis picture Yanis Urbis · Jul 14, 2017 · Viewed 14.7k times · Source

Is it possible to conditionally redirect a user to another Url based on cookie value? I know I can inspect cookie on a server & then redirect. But what should I do if a user came through Link. (I can't use Route.push because it's undefined on the server) Is there any way to use Router only on the browser?

I know at least one way to do this: to create simple button and add Router push & check cookies inside onClick handler, but is it a correct way to do this?

Answer

Soorena picture Soorena · Aug 16, 2017

you can check if user has accessed the page via server or client side. and after that you can conditionally redirect with the proper tool. getInitialProps function gets a ctx object. you can check whether its on server or client like this:

import Router from 'next/router'

export default class Browse extends Component {

    static async getInitialProps (ctx) {
        if (ctx && ctx.req) {
            console.log('server side')
            ctx.res.writeHead(302, {Location: `/`})
            ctx.res.end()
        } else {
            console.log('client side')
            Router.push(`/`)
        }
...