Реагировать: проблема с аутентификацией

#reactjs #forms #authentication

#reactjs #формы #аутентификация

Вопрос:

Я хочу написать веб-страницу, где есть форма входа в систему. Если имя пользователя и пароль совпадают, мы переходим на другую страницу. В противном случае мы перезагружаемся на ту же страницу.

 import React, { Component } from "react";
import { Redirect } from "react-router-dom";

class Login extends Component {
  constructor(props) {
    super(props);
    let logged = false;
    this.state = {
      username: "",
      password: "",
      logged,

      box: {
        width: "300px",
        margin: "0 auto",
        border: "1px solid blue",
        textAlign: "center",
        verticalAlign: "middle",
        lineHeight: "20px",
        backgroundColor: "white",
      },

      body: {
        backgroundColor: "#ccffff",
        height: `100vh`,
        width: `100vw`,
        display: `flex`,
        alignItems: `center`,
        justifyItems: `center`,
      },
    };
    this.onChange = this.onChange.bind(this);
    this.submitForm = this.submitForm.bind(this);
  }

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

  submitForm(e) {
    e.preventDefault();
    const { username, password } = this.state;
    this.verify();
  }

  verify() {
    if (this.state.username === "A" amp;amp; this.state.password === "hello") {
      console.log("Accepted");
      this.setState({
        logged: true,
      });
    } else {
      console.log("Not accepted");
    }
  }

  getForm() {
    return (
      <form onSubmit={this.submitform}>
        <label for="username">First name:</label>
        <input
          type="text"
          placeholder="Username"
          name="username"
          size="20"
          value={this.state.username}
          style={{ width: "50%", height: "7%" }}
          onChange={this.onChange}
        />
        <br />
        <br />

        <label for="password">Password: </label>
        <input
          type="password"
          placeholder="Password"
          name="password"
          size="15"
          value={this.state.password}
          onChange={this.onChange}
        />
        <br />
        <br />
        <input type="submit"></input>
      </form>
    );
  }

  render() {
    if (this.state.logged) {
      return <Redirect to="/admin" />;
    }

    return (
      <div style={this.state.body}>
        <div style={this.state.box}>
          <br />
          <br />
          {this.getForm()}
          <br />
          <br />
        </div>
      </div>
    );
  }
}

export default Login;
  

В интерфейсной части все работает хорошо. Но что касается аутентификации, элемент управления даже не перейдет в verify() . Пожалуйста, помогите

Ответ №1:

вы неправильно ввели this.submitForm. проверьте это

  <form onSubmit={this.submitForm}>
  

Проверьте это перед —

 verify() {

   console.log('Fired')


    if (this.state.username === "A" amp;amp; this.state.password === "hello") {
      console.log("Accepted");
      this.setState({
        logged: true,
      });
    } else {
      console.log("Not accepted");
    }
  }
  

Комментарии:

1. Омг да. Похоже, это была проблема. Теперь я получаю следующее: Ошибка: сбой инварианта: вы не должны использовать <Redirect> вне <Router> Что мне делать?

2. @shankyyyyyyyy , это может сработать this.props.history.push( /admin )