質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

2462閲覧

ログイン成功時、リダイレクトさせたいが出来ない。

izuna385

総合スコア53

Redux

Reduxは、JavaScriptアプリケーションの状態を管理するためのオープンソースライブラリです。ReactやAngularで一般的にユーザーインターフェイスの構築に利用されます。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/08/24 12:35

前提・実現したいこと

バックエンドをDjango, フロントをReactで実装しています。
ログイン成功時、リダイレクトを行い、/dashboardに移りたいのですが出来ません。

発生している問題・エラーメッセージ

エラーは発生しておらず、バックエンドからは200が返ってくることを確認しています。

該当のソースコード

React.js

1 2import React, { useContext, useState } from "react"; 3import { 4 BoldLink, 5 BoxContainer, 6 FormContainer, 7 Input, 8 MutedLink, 9 SubmitButton, 10 FieldContainer, 11 FieldError, 12 FormError 13} from "../common"; 14import { useFormik } from "formik"; 15import * as yup from "yup"; 16import axios from "axios"; 17import { withRouter } from "react-router-dom"; // new import 18import { connect } from "react-redux"; // new import 19import PropTypes from "prop-types"; // new import 20import { Link } from "react-router-dom"; 21import { Container, Button, Row, Col, Form } from "react-bootstrap"; 22 23import {setAxiosAuthToken, toastOnError} from "../../utils/Utils"; 24import {getCurrentUser, setToken, unsetCurrentUser} from "./LoginActions"; // new import 25 26const validationSchema = yup.object( 27 {userName: yup.string().required(), 28 password: yup.string().required()} 29) 30 31const login = (userData, redirectTo) => dispatch => { 32 axios 33 .post("/api/v1/token/login/", userData) 34 .then(response => { 35 const { auth_token } = response.data; 36 setAxiosAuthToken(auth_token); 37 dispatch(setToken(auth_token)); 38 dispatch(getCurrentUser(redirectTo)); // ここでログイン成功時、リダイレクトさせたい。 39 }) 40 .catch(error => { 41 dispatch(unsetCurrentUser()); 42 toastOnError(error); 43 }); 44}; 45 46// aaaaa@ggggggg.com (test account) 47const Login = (props) => { 48 const [error, setError] = useState(null); 49 50 const onSubmit = async (values) => { 51 const postedData = { 52 username: values.userName, 53 // email: values.email, 54 password: values.password 55 } 56 setError(null); 57 console.log("valuesForLogin", postedData) 58 login(values, "/dashboard") // このログイン関数が何も行ってくれない。(ここでリダイレクトさせたい。) 59 60 const response = await axios.post("/api/v1/token/login/", postedData).catch((err) => { 61 if (err && err.response) { 62 setError(err.response.data.message); 63 } 64 } 65 66 ); 67 if (response) { 68 console.log("Auth success"); 69 console.log(response); 70 const { auth_token } = response.data; // get auth_token 71 setAxiosAuthToken(auth_token); 72 } 73 74 75 } 76 const formik = useFormik({initialValues: {userName: "", password: ""}, validateOnBlur: true, onSubmit, validationSchema: validationSchema }); 77 return ( 78 <BoxContainer> 79 <h1>Login</h1> 80 {error && <FormError>{error ? error: ""}</FormError>} 81 <FormContainer onSubmit={formik.handleSubmit}> 82 <FieldContainer> 83 <Input name="userName" placeholder="Username" value={formik.values.userName} onChange={formik.handleChange} onBlur={formik.handleBlur}/> 84 {<FieldError>{formik.touched.userName && formik.errors.userName ? formik.errors.userName : ""}</FieldError>} 85 </FieldContainer> 86 87 88 <FieldContainer> 89 <Input name="password" type="password" placeholder="Password" value={formik.values.password} onChange={formik.handleChange} onBlur={formik.handleBlur}/> 90 {<FieldError>{formik.touched.password && formik.errors.password ? formik.errors.password : ""}</FieldError>} 91 92 </FieldContainer> 93 <MutedLink href="#">Forget your password?</MutedLink> 94 <SubmitButton type="submit" 95 disabled={!formik.isValid} 96 >Signin</SubmitButton> 97 </FormContainer> 98 99 100 </BoxContainer> 101 ); 102} 103 104export default Login; 105

getCurrentUser の部分は以下になります。

React.js

1export const getCurrentUser = redirectTo => dispatch => { 2 axios 3 .get("/api/v1/users/me/") 4 .then(response => { 5 const user = { 6 username: response.data.username, 7 // email: response.data.email 8 }; 9 dispatch(setCurrentUser(user, redirectTo)); 10 }) 11 .catch(error => { 12 dispatch(unsetCurrentUser()); 13 toastOnError(error); 14 }); 15}; 16 17export const setCurrentUser = (user, redirectTo) => dispatch => { 18 localStorage.setItem("user", JSON.stringify(user)); 19 dispatch({ 20 type: SET_CURRENT_USER, 21 payload: user 22 }); 23 24 console.log("set user" + redirectTo); 25 if (redirectTo !== "") { 26 dispatch(push(redirectTo)); 27 } 28};

試したこと

バックエンド側で200が返却されることは確認しています。

ログイン画面

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ソース見た限りだと、

javascript

1import { withRouter } from "react-router-dom";

でインポートしてきた withRouter 使うてないみたいやけど、これ使うて、

javascript

1export default Login;

のとこのLoginwithRouterかましたって、

javascript

1export default withRouter(Login);

にしとけば、Login の props に history が生えてきまっしゃろ。そしたらLoginの中で

javascript

1props.history.push('/dashboard')

としてやれば、'/dashboard' にルーティング設定してあるコンポーネントが表示されると思うで。

投稿2021/08/24 19:45

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

izuna385

2021/08/28 04:27

/dashboard側で別の問題が見つかりましたが、解決できました! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問