2016-09-16 10 views
1

私はredux-formを使用してサインインフォームをレンダリングし、ユーザーがユーザー名とパスワードを入力できる同形アプリを持っています。Isomorphic Reactアプリ - JSがオフのときにフォーム提出を処理する方法

これはすべてクライアント側でうまく動作しますが、JSをオフにすると、フォームからAPIを介して値を取得できないようです。

NB:フォームがGETの場合、値はURLにクエリパラメータとして表示されますが、機密データを表示したくないことは明らかです。

class SignIn extends Component { 

    static propTypes = { 
     errorMessage: PropTypes.string, 
     handleSubmit: PropTypes.func, 
     signinUser: PropTypes.func 
    } 

    statics = { 
     fields: [ 
      { 
       name: 'email', 
       label: 'Email' 
      }, 
      { 
       name: 'password', 
       label: 'Password', 
       type: 'password' 
      } 
     ] 
    } 

    handleFormSubmit({ email, password }) { 
     this.props.signinUser({ email, password }); 
    } 

    // renders an alert if field has an error 
    renderAlert() { 
     if (this.props.errorMessage) { 
      return (
       <div className='alert alert-danger'> 
        <strong>Oops!</strong> {this.props.errorMessage} 
       </div> 
      ); 
     } 

     return false; 
    } 

    // render the field 
    renderField = ({ input, label, name, type, meta: { touched, error }, ...rest }) => (
     <div> 
      <label htmlFor={name}>{label}</label> 
      <div> 
       <input {...input} {...rest} id={name} placeholder={label} type={type} /> 
       {touched && error && <span className='error'>{error}</span>} 
      </div> 
     </div> 
    ); 

    render() { 
     const { handleSubmit } = this.props; 

     return (
      <form method='post' onSubmit={handleSubmit((data) => this.handleFormSubmit(data))}> 
       { 
        this.statics.fields.map((field, index) => 
         <fieldset className='form-group' key={index}> 
          <Field 
           className='form-control' 
           component={this.renderField} 
           label={field.label} 
           name={field.name} 
           type={field.type || 'text'} 
          /> 
         </fieldset> 
        ) 
       } 
       {this.renderAlert()} 
       <button action='submit' className='btn btn-primary'>Sign in</button> 
      </form> 
     ); 
    } 
} 

及び経路:

<Route path='/' component={App}> 
    <IndexRoute component={Welcome} /> 
    <Route path='/feature' onEnter={requireAuth} component={Feature} /> 
    <Route path='/signin' component={Signin} /> 
    <Route path='/signout' component={Signout} /> 
    <Route path='/signup' component={Signup} /> 
</Route> 
+0

GETとPOSTのちょっとしたメモです。 POSTを使用すると、機密データを隠すことはできません**。投稿されたものはすべてPOSTリクエストではっきりと見えますが、別の場所(URLではなくリクエスト本体)に表示されます。機密データを第三者から隠す場合は、SSLを使用してください。ユーザーから何も隠しておきたい場合は、ブラウザに送信しないでください。 – ivarni

+1

私は理解していませんが、ReactがJSを無効にして動作することをどのように期待しますか?そのサーバー側をレンダリングしない限り、フォームはレンダリングされません。たとえそうであっても、フォームの送信を傍受し、ブラウザでJSを有効にしないでAJAX呼び出しを行う方法はありません。 – Benja

+0

ユニバーサル/アモルファスのアプリであるため、サーバーサイドをレンダリングしています。だから多分問題はnode.jsの増加であり、どのようにノードを傍受してノードにPOSTリクエストを行うのですか? – Paul

答えて

0

これはフォームを含む:)

ページがHTTPSであるべきであり、それはHTTPSエンドポイントへの投稿されなければならないため、HTTPSが何であるかであります。

普遍的なコードがよく書かれていて、ページがサーバー上でフォームをレンダリングしている場合(そしてすべてのJSが行っているのはページの拡張です)、httpsでフォームをPOSTするのは問題ありません。

+0

私はそれをPOSTしていますが、値を取得できません。私はReactでこれを行うことができますか、この部分はnode.js経由で行う必要があるのでしょうか? – Paul

+1

フォームをPOSTするとサーバーに送信されるので、ノードでkoa/expressにする必要があります。すなわち http://stackoverflow.com/questions/5710358/how-to-retrieve-post-query-parameters-in-express [react-lego](https://github.com/peter-mouland/) react-lego)は、アイデアがどこから始まるかを知りたい場合に、サーバー上にapiを持つ普遍的なアプリケーションです。 –

関連する問題