react-railsによるCSRF対策
最近、react-railsを使ってRails上でReactコンポーネントを実装している。フォームを実装する際、Railsのフォームヘルパーは自動的にCSRFトークンを送るように<input>
を生成してくれるが、Reactコンポーネントでフォームを実装する場合はそれを自分で実装する必要がある。
react-railsであれば、Reactコンポーネントにpropsを簡単に渡せるため、props経由でCSRFトークンを渡すことで実装することができる。
// new.html.slim
= react_component "SignUpForm",
{ csrf_params: request_forgery_protection_token, csrf_token: form_authenticity_token }
// SignUpForm.jsx
render() {
return (
<form method="post" action="/sign_up">
<input type="hidden" name={this.props.csrfParams} value={this.props.csrfToken} />
</form>
);
}