web-dev-qa-db-ja.com

Next.jsでの条件付きリダイレクト

Cookieの値に基づいて、条件付きでユーザーを別のURLにリダイレクトすることは可能ですか?サーバー上のCookieを検査してからリダイレクトできることはわかっています。しかし、ユーザーがLinkを経由した場合は、どうすればよいですか。 (サーバー上で未定義のため、Route.Pushを使用できません)ブラウザーでのみルーターを使用する方法はありますか?

私はこれを行う少なくとも1つの方法を知っています:単純なbuttonを作成し、ルータープッシュを追加してonClickハンドラー内にCookieをチェックしますが、これを行う正しい方法ですか?

6
Yanis Urbis

ユーザーがサーバー側またはクライアント側を介してページにアクセスしたかどうかを確認できます。その後、適切なツールを使用して条件付きでリダイレクトできます。 getInitialProps関数はctxオブジェクトを取得します。次のように、サーバー上にあるかクライアント上にあるかを確認できます。

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(`/`)
        }
...
19
Soorena