私のnextJSアプリケーションでは、ユーザーはログイン(ログインページ)を行うことができ、トークンを含むクッキーを作成し、ルート(メインページ)主成分を使用します。ReactJS/nextJS:リダイレクト後にクッキー/プロパティへのアクセスを取得しない
メインコンポーネントでは、getInitialPropsを使用してCookieトークンを取得しています。しかし、これはページをリフレッシュした後にしか動作しません。 今、私はログインしてリダイレクトしています。ボタンをクリックすると、トークンはありません。ページを更新した後、私はトークンを取得します。
どうすればこの問題を回避できますか?私はあなたがする必要がありますので、あなたのクッキーは、ブラウザに保存されているログイン後
ログイン
export class Login extends Component {
render() {
return (
<Form id='login' onSubmit={this._onSubmit.bind(this)}>
// Input fields
</Form>
)
}
_onSubmit = (event) => {
event.preventDefault()
const { username, password } = this.state
// Sends mutation request to graphQL server
this.props.signinUserMutation({
variables: { username, password }
}).then(response => {
// Returns token
const token = response.data.token
if (token) {
Cookies.set('auth-token', token)
this.props.client.resetStore().then(() => {
redirect({}, '/main')
})
}
})
}
}
メイン
class Main extends Component {
static async getInitialProps (context, apolloClient) {
const { req } = context
const initProps = {}
if (req && req.headers) {
const cookies = req.headers.cookie
if (typeof cookies === 'string') {
const cookiesJSON = jsHttpCookie.parse(cookies)
initProps.token = cookiesJSON['auth-token']
}
}
return initProps
}
clickIt =() => {
console.log(this.props.token)
}
render() {
return (<Button onClick={this.clickIt.bind(this)})
}
}
を使用すると仮定し、あなたが見ることができるですあなたのブラウザの開発ツールで設定されたクッキー? Chome:Dev Tools> Application> Cookies – zarcode
@ zarcodeはい、ログインボタンをクリックするとCookieが設定されます。 – user3142695
getInitialPropsでconsole.log(document.cookie)を実行できるので、出力される内容を確認できますか?ルート変更時に 'getInitialProps'がトリガされます。 – zarcode