2017-06-03 4 views
0

Ich habe einige ähnliche Probleme untersucht und .value hinzugefügt. Aber immer Fehler erhalten: options.password must be a string, auch ich habe die password.value.toString().Konto-Basis: options.password muss eine Zeichenfolge sein

import React, {Component} from 'react'; 
import ReactDom from 'react-dom'; 
import { Accounts } from 'meteor/accounts-base'; 

class Register extends Component { 

    constructor(props) { 
    super(props); 
    this.handleSubmit = this.handleSubmit.bind(this); 
    } 

    handleSubmit (event){ 
    event.preventDefault(); 
    console.log(this.email.value); 
    console.log(this.password.value); 
    const res = Accounts.createUser(this.email.value, this.password.value.toString()); 
    console.log(res); 
    } 

    render() { 
    return (
     <form onSubmit={this.handleSubmit}> 
     <div className="form-group"> 
      <label htmlFor="email">Email:</label> 
      <input className="form-control" type="email" ref={(email) => this.email = email}/> 
     </div> 
     <div className="form-group"> 
      <label htmlFor="password">Password:</label> 
      <input className="form-control" type="password" ref={(password) => this.password = password}/> 
     </div> 
     <div className="form-group"> 
      <button type="submit" className="btn btn-primary">Submit</button> 
     </div> 
     </form> 
    ); 
    } 
} 

export default Register; 
+0

Dies sieht wie ein Fehler im Zusammenhang mit Ihrer Logik auf dem Server aus. Was bekommen Sie für 'console.log (this.password.value);' ?? – Panther

+0

Ich kann den richtigen Passwort-Wert bekommen und wenn ich typeof benutze, ist es auch String – Han

Antwort

1

Sie benötigen ein Objekt zu übergeben, nicht mehr als 2 String-Argumente:

const res = Accounts.createUser({ 
    email: this.email.value, 
    password: this.password.value, 
}); 

EDIT: über Ihre Reagieren Komponente, mit Staaten und controlled components ist eine bessere Praxis als Refs:

import React, {Component} from 'react'; 
import ReactDom from 'react-dom'; 
import { Accounts } from 'meteor/accounts-base'; 

class Register extends Component { 

    constructor(props) { 
    super(props); 
    this.state = { 
     email: '', 
     password: '', 
    } 

    this.handleSubmit = this.handleSubmit.bind(this); 
    } 

    handleInputChange(event) { 
     const target = event.target; 
     const name = target.name; 

     this.setState({ 
     [name]: value, 
     }); 
    } 

    handleSubmit (event){ 
    event.preventDefault(); 
    const res = Accounts.createUser({ 
     email: this.state.email, 
     password: this.state.password, 
    }); 
    } 

    render() { 
    return (
     <form onSubmit={this.handleSubmit}> 
     <div className="form-group"> 
      <label htmlFor="email">Email:</label> 
      <input className="form-control" type="email" name="email" onChange={this.handleInputChange} /> 
     </div> 
     <div className="form-group"> 
      <label htmlFor="password">Password:</label> 
      <input className="form-control" type="password" name="password" onChange={this.handleInputChange} /> 
     </div> 
     <div className="form-group"> 
      <button type="submit" className="btn btn-primary">Submit</button> 
     </div> 
     </form> 
    ); 
    } 
} 
+0

Vielen Dank! – Han

+0

BTW, Sie haben vergessen, die handleInputChange Funktion zu binden und this.setState sollte '[name]: target.value,' – Han

+0

Ja, ich schrieb es schnell und habe es nicht getestet. Freut mich, dass du dein Problem gelöst hast. :) –

Verwandte Themen