微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过Firebase进行身份验证后的ReactJS路由

如何解决通过Firebase进行身份验证后的ReactJS路由

我的reactjs应用程序中具有firebase身份验证,如果用户登录(通过正确的电子邮件和密码),我想重定向到/ home,然后向我显示一个组件。 登录后我设法推送到/ home。但是,如果我在没有(正确)用户登录数据的情况下将/ home添加到url,也可以使用。 只有在用户数据正确的情况下,有人可以帮助我进行路由吗?这是我第一次使用React Router。

所以我的Login.js

import React from "react";
import {auth} from "../firebase";
import { browserRouter as Router,Redirect} from "react-router-dom";

class Login extends React.Component {
  constructor() {
    super();

    this.state = {
      email: "",password: "",isAuthenticated: false,};

    this.onChangeHandler = this.onChangeHandler.bind(this);
    this.onSubmitHandler = this.onSubmitHandler.bind(this);
}

  onChangeHandler(e) {
    if (e.target.name === "email") {
      this.setState({ email: e.target.value });
    }

    if (e.target.name === "password") {
      this.setState({ password: e.target.value });
    }
  }

  onSubmitHandler() {
    let email = this.state.email;
    let password = this.state.password;

    auth.signInWithEmailAndPassword(email,password);


      auth.onAuthStateChanged((user) => {
        if (user) {
          this.setState({isAuthenticated: true});
          console.log("USER " + user.email);
        } 
      });
  }


  render() {
    return (
      <div name="login-form">
        <header>
          <h1>Headline</h1>
          <h2>Login</h2>
        </header>
          <input
            placeholder="email"
            type="email"
            name="email"
            onChange={this.onChangeHandler}
            value={this.state.email}
          ></input>
          <input
            placeholder="password"
            type="password"
            name="password"
            onChange={this.onChangeHandler}
            value={this.state.password}
            required={true}
          ></input>
          
          <div>
            {this.state.isAuthenticated ? <Router> <Redirect to='/home'/></Router> : null}
            <button onClick={() => {this.onSubmitHandler()}}>Login</button>
          </div>
      </div>
    );
  }
}

export default Login;

index.js:

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import * as serviceWorker from './serviceWorker';
import Login from './components/Login';
import {browserRouter as Router,Switch,Route} from 'react-router-dom';


ReactDOM.render(
  <React.StrictMode>
    <Router>
      <Switch>
        <Route exact path="/">
          <Login/>
        </Route>
        <Route exact path="/home">
          <h1>Test</h1>
        </Route>
      </Switch>
    </Router>
  </React.StrictMode>,document.getElementById('root')
);

serviceWorker.unregister();

还有一个firebase.js,其中包含初始化和export const auth = firebase.auth();

我已经阅读了一些有关私有路由的信息,但是由于我还是ReactJS的初学者,所以我不确定如何使用它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。