Reactルート-ログアウトは正しいページにリダイレクトできません

CCCC

サイドメニューの[ログアウト]をクリックすると
、/ loginに戻るはずですが、コンテンツが消えて同じルート/ homeに留まります。

App.jsのいくつかの状態の説明

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

import Login from "./Login";
import Drawer from "./Drawer";

console.warn = console.error = () => {};

class App extends Component {
  state = {
    isAuthenticated: false,
    isAuthenticating: true,
    user: null
  };

  setAuthStatus = (authenticated) => {
    this.setState({ isAuthenticated: authenticated });
  };

  setUser = (user) => {
    this.setState({ user: user });
  };

  handleLogout = async () => {
    try {
      //Sign Out api runs here
      this.setAuthStatus(false);
      this.setUser(null);
    } catch (error) {
      console.log(error);
    }
  };

  async componentDidMount() {
    try {
      // run api change to auth setAuthStatus
      // if api no return error > continue
      this.setAuthStatus(true);
      let user = { id: 123 };
      this.setUser(user);
    } catch (error) {
      console.log(error);
    }
    this.setState({ isAuthenticating: false });
  }

  render() {
    const authProps = {
      isAuthenticated: this.state.isAuthenticated,
      user: this.state.user,
      setAuthStatus: this.setAuthStatus,
      setUser: this.setUser
    };
    return (
      !this.state.isAuthenticating && (
        <React.Fragment>
          {this.state.isAuthenticated ? (
            <Drawer
              props={this.props}
              auth={authProps}
              handleLogout={this.handleLogout}
            />
          ) : (
            <BrowserRouter>
              <Switch>
                <Redirect exact from="/" to="/Login" />
                <Route
                  path="/login"
                  render={(props) => <Login {...props} auth={authProps} />}
                />
              </Switch>
            </BrowserRouter>
          )}
        </React.Fragment>
      )
    );
  }
}

export default App;

isAuthenticating:
componentDidMountはapiを呼び出して、セッションが続行する
かどうかを確認します。続行する場合、isAuthenticatingはtrueに等しく、ページを更新したり他のルートに移動したりするときに、現在のセッションでユーザー認証が失われるのを防ぐことができます。

isAuthenticated:
!isAuthenticated>がログインページにとどまる/ログインページにリダイレクトする必要がある場合

SandBox:https://codesandbox.io/s/restless-breeze-p5uih file = / src /
App.js

Domino987

サンドボックスで期待どおりに動作します。ユーザーがでログアウトしている場合は、ドロワーとメインコンテンツを非表示にします

this.state.isAuthenticated ? (Drawer) : <Login/>

ドロワーをメインコンテンツから分離し、ルーターをマージする必要があります。通常、アプリには1つのルーターのみを使用する必要があります。また、リダイレクトを削除します。

 <React.Fragment>
          {this.state.isAuthenticated ? (
            <Drawer
              props={this.props}
              auth={authProps}
              handleLogout={this.handleLogout}
            />
          ) : (
            <BrowserRouter>
            <main
          className={clsx(classes.content, {
            [classes.contentShift]: open
          })}
        >
              <Switch>
              {Routes.map((route) => {
              return (
                <Route
                  path={route.path}
                  render={(prop) => (
                    <route.component {...prop} auth={props.auth} />
                  )}
                />
              );
            })}
                <Route
                  path="/login"
                  render={(props) => <Login {...props} auth={authProps} />}
                />
              </Switch>
              </main>
            </BrowserRouter>
          )}
        </React.Fragment>

ログアウトにルーティングするには、最初にブラウザルーターをインデックスまで移動して折り返します。これにより、withRouter HigherOrderComponentを使用export default withRouter(App)できるようになりますこれで、小道具から履歴にアクセスして、ログインに移動できます。

    this.props.history.push("/login")`

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ASP.NET CoreIdentityは正しいログオンページにリダイレクトされません

分類Dev

djangoミドルウェアリダイレクトはページをレンダリングしません

分類Dev

Djangoにログインした後、ホームページにリダイレクトできません

分類Dev

ログインページからホームページにリダイレクトできません

分類Dev

Passport.authenticateとログアウトのメソッドとフラッシュは、リダイレクト後に新しいページにルーティングするまで機能しません

分類Dev

別のウェブページにリダイレクトできません

分類Dev

ページに正しくリダイレクトされないFUELCMSをインストールできません

分類Dev

ログアウトをクリックしたときのPHPプロジェクトでは、ホームページにリダイレクトしています。戻るボタンをクリックすると、アカウントページに戻ります。

分類Dev

Scribeでログインを使用しているときに適切なページをリダイレクトできません

分類Dev

angleJSはログインページからハッシュされたルートにリダイレクトできません

分類Dev

ログイン成功後、ホームページにリダイレクトできません

分類Dev

春のセキュリティでユーザーがログアウトしたときに別のページにリダイレクトしない方法

分類Dev

Railsルートは正しくリダイレクトできません

分類Dev

laravelauthミドルウェアがログインページにリダイレクトされていません

分類Dev

Laravel5.1認証-ログインページにリダイレクトできません

分類Dev

JSFは別のページにリダイレクトし、ダイアログを開きます

分類Dev

SymfonyonAuthenticationSuccessが正しいページにリダイレクトされませんでした

分類Dev

ログインに成功した後、MediaWikiはページにリダイレクトされません

分類Dev

シングルページ301リダイレクトリダイレクトではありませんか?

分類Dev

ログインページが別のページにリダイレクトされていません

分類Dev

Reactルーターページのリダイレクトが正しくありませんか?

分類Dev

nuxtでログアウトした後にホームページにリダイレクトするにはどうすればよいですか?

分類Dev

React Routerはログインページにリダイレクトしていますが、ログインコンポーネントをレンダリングしていません

分類Dev

ウェブサイトの管理ページは、誰かがアクセスしようとした場合にのみ管理者がアクセスできるようになり、ログインページにリダイレクトされます

分類Dev

this.props.history.push( '/')を使用したユーザーログアウトリダイレクトは、目的のページにリダイレクトされません

分類Dev

http経由でウェブサイトを開くときは常にログインページにリダイレクトします

分類Dev

Reactアプリをgithubページにデプロイしたときに正しくレンダリングされませんでした

分類Dev

react-router-プライベートページをログインページにリダイレクトしません

分類Dev

StripeCheckoutはチェックアウトページExpressにリダイレクトされません

Related 関連記事

  1. 1

    ASP.NET CoreIdentityは正しいログオンページにリダイレクトされません

  2. 2

    djangoミドルウェアリダイレクトはページをレンダリングしません

  3. 3

    Djangoにログインした後、ホームページにリダイレクトできません

  4. 4

    ログインページからホームページにリダイレクトできません

  5. 5

    Passport.authenticateとログアウトのメソッドとフラッシュは、リダイレクト後に新しいページにルーティングするまで機能しません

  6. 6

    別のウェブページにリダイレクトできません

  7. 7

    ページに正しくリダイレクトされないFUELCMSをインストールできません

  8. 8

    ログアウトをクリックしたときのPHPプロジェクトでは、ホームページにリダイレクトしています。戻るボタンをクリックすると、アカウントページに戻ります。

  9. 9

    Scribeでログインを使用しているときに適切なページをリダイレクトできません

  10. 10

    angleJSはログインページからハッシュされたルートにリダイレクトできません

  11. 11

    ログイン成功後、ホームページにリダイレクトできません

  12. 12

    春のセキュリティでユーザーがログアウトしたときに別のページにリダイレクトしない方法

  13. 13

    Railsルートは正しくリダイレクトできません

  14. 14

    laravelauthミドルウェアがログインページにリダイレクトされていません

  15. 15

    Laravel5.1認証-ログインページにリダイレクトできません

  16. 16

    JSFは別のページにリダイレクトし、ダイアログを開きます

  17. 17

    SymfonyonAuthenticationSuccessが正しいページにリダイレクトされませんでした

  18. 18

    ログインに成功した後、MediaWikiはページにリダイレクトされません

  19. 19

    シングルページ301リダイレクトリダイレクトではありませんか?

  20. 20

    ログインページが別のページにリダイレクトされていません

  21. 21

    Reactルーターページのリダイレクトが正しくありませんか?

  22. 22

    nuxtでログアウトした後にホームページにリダイレクトするにはどうすればよいですか?

  23. 23

    React Routerはログインページにリダイレクトしていますが、ログインコンポーネントをレンダリングしていません

  24. 24

    ウェブサイトの管理ページは、誰かがアクセスしようとした場合にのみ管理者がアクセスできるようになり、ログインページにリダイレクトされます

  25. 25

    this.props.history.push( '/')を使用したユーザーログアウトリダイレクトは、目的のページにリダイレクトされません

  26. 26

    http経由でウェブサイトを開くときは常にログインページにリダイレクトします

  27. 27

    Reactアプリをgithubページにデプロイしたときに正しくレンダリングされませんでした

  28. 28

    react-router-プライベートページをログインページにリダイレクトしません

  29. 29

    StripeCheckoutはチェックアウトページExpressにリダイレクトされません

ホットタグ

アーカイブ