[英]unable to redirect after login in reactjs
大家好,我是ReactJS的新手,因為我試圖通過Node JS后端對用戶進行身份驗證,盡管我能夠在控制台中打印JSON消息,但無法將其重定向到首頁。 有人可以幫忙..這是login.js(客戶端反應)的代碼...
import React, { Component } from 'react';
import './Login.css';
import {Link, Redirect} from 'react-router-dom';
import {history} from 'history';
class AddLogin extends Component {
constructor(props)
{
super(props)
this.state = {
user_email : "",
user_password: "",
user_remember : ""
}
}
change = e =>
{
this.setState({
[e.target.name] : e.target.value
})
}
getWebsite = () => {
fetch("/").then(console.log(this.state));
};
onSubmit = e =>
{
e.preventDefault();
//console.log(this.state);
this.setState({
user_email : "",
user_password: "",
user_remember : ""
})
fetch('login', {
method : "POST",
headers : {
"Content-Type" : "application/json; charset=utf-8"
},
body : JSON.stringify(this.state)
})
.then(function(response){return response.json();})
.then(function(json){
if(json.success===true){
console.log(json);
// this.props.onRouteChange('/');
this.props.history.push("/")
}
else{
console.log("data 404");
}})
.then(this.getWebsite)
}
render() {
return (
<div>
<body class="my-login-page">
<section class="h-100">
<div class="container h-100">
<div class="row justify-content-md-center h-100">
<div class="card-wrapper">
<div class="brand">
<img src="img/logo.jpg" />
</div>
<div class="card fat">
<div class="card-body">
<h4 class="card-title">Login</h4>
<form method="POST">
<div class="form-group">
<label for="email">E-Mail Address</label>
<input id="email" type="email" class="form-control" name="user_email" value={this.state.user_email} onChange={e => this.change(e)} required autofocus />
</div>
<div class="form-group">
<label for="password">Password
<a href="forgot.html" class="float-right">
Forgot Password?
</a>
</label>
<input id="password" type="password" class="form-control" name="user_password" value={this.state.user_password} onChange={e => this.change(e)} required data-eye />
</div>
<div class="form-group">
<label>
<input type="checkbox" name="user_remember" value={this.state.user_remember} onchange={e => this.change(e)}/> Remember Me
</label>
</div>
<div class="form-group no-margin">
<button class="btn btn-primary btn-block" onClick = {e => this.onSubmit(e)} >
Login
</button>
</div>
<div class="margin-top20 text-center">
Don't have an account? <Link to ="/Register">Create One</Link>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</section>
</body>
</div>
);
}
}
export default AddLogin;
這是后端代碼(node.js代碼...)
var express = require('express');
var router = express.Router();
var con = require('./db');
var func = require('./func.js');
var edo=require('./edonomix.js');
// router.get('/',function(req, res, next)
// {
// if(req.session.adminid)
// {
// res.json({"success":true,'msg':'admin home page'});
// }
// else
// {
// res.json({"success":true,'msg':'admin login page'});
// }
// });
router.post('/',function(req,res)
{
if(req.session.adminid)
{
//data at home page
res.json({"success":true,'msg':'admin home page'});
}
else
{
req.check('user_password','invalid password at least 6 character required').isLength({min:6,max:100});
req.check('user_email','invalid username').isLength({min:2,max:100}).isEmail();
var verrs=req.validationErrors();
if(verrs)
{
res.json({ success:false,msg: verrs[0].msg,});
}
else
{
console.log(req.ip);
var admin =
{
email:req.body.user_email,
password:req.body.user_password
};
con.query("select * from admin where email_id=?",admin.email,function(err,result,fields)
{
if(err)
{
console.log(err);
res.json({'success':false});
}
else if(result.length==1)
{
if(edo.hashPassword(admin.password)===result[0].password)
{
var hour = 3600000;
req.session.cookie.expires = new Date(Date.now() + hour);
req.session.cookie.maxAge = hour;
req.session.adminid=result[0].admin_id;
res.json({'success':true,'msg':'admin home page'})
}
else
{
//wrong pass
res.json({"success":true,'msg':'admin login page invalid email/password'});
}
}
else
{
res.json({"success":true,'msg':'admin login page wrong email'});
}
});
}
}
});
module.exports = router;
這是App.js代碼(此處為反應代碼)...
import React, { Component } from 'react';
// import logo from './logo.svg';
import './App.css';
import Header from './components/Header/Header';
import Footer from './components/Footer/Footer';
import Home from './components/Home/Home';
import Sidebar from './components/Sidebar/Sidebar';
import AddProduct from './components/Product/AddProduct';
import ProductTable from './components/Product/ProductTable';
import AddBlog from './components/Blog/AddBlog';
import AddUser from './components/User/AddUser';
import AddPartner from './components/Partner/AddPartner';
import AddForms from './components/Forms/AddForms';
import Signin from './components/Login/AddLogin';
import Register from './components/Login/Register';
import Navigation from './components/Navigation';
import AddEquipment from './components/Equipment/AddEquipment';
import ViewEquipment from './components/Equipment/ViewEquipment';
import AddCustomer from './components/Customer/AddCustomer';
import CustomerTable from './components/Customer/CustomerTable';
import Admin from './components/Admin/Admin';
import AMC from './components/AMC/AMC';
import Complaint from './components/Complaint/Complaint';
import Employee from './components/Employee/Employee';
import Profile from './components/Profile/Profile';
import Schedule from './components/Schedule/Schedule';
import Site from './components/Site/Site';
import Zone from './components/Zone/Zone';
import { Route } from 'react-router-dom';
class App extends Component {
constructor() {
super();
this.state = {
route: 'signin',
isSignedIn: false,
}
}
onRouteChange = (route) => {
if (route === 'signout') {
this.setState({isSignedIn: false})
} else if (route === '/') {
this.setState({isSignedIn: true})
console.log(this.state.route);
}
else{
console.log('thi is else');
}
this.setState({route: route});
}
render() {
const { isSignedIn, route } = this.state;
return (
<div>
<Navigation isSignedIn={isSignedIn} onRouteChange={this.onRouteChange} />
{ route === '/'
?
<div>
<Header />
<Sidebar />
<Route path = "/" exact component = {Home} />
<Route path = "/AddProduct" exact = {true} component = {AddProduct} />
<Route path = "/ProductTable" exact = {true} component = {ProductTable} />
<Route path="/AddBlog" exact = {true} component = {AddBlog} />
<Route path = "/AddUser" exact = {true} component = {AddUser} />
<Route path = "/AddPartner" exact = {true} component = {AddPartner} />
<Route path = "/AddForms" exact = {true} component = {AddForms} />
<Route path = "/Register" exact = {true} component = {Register} />
<Route path = "/AddEquipment" exact component = {AddEquipment} />
<Route path = "/ViewEquipment" exact component = {ViewEquipment} />
<Route path = "/AddCustomer" exact component = {AddCustomer} />
<Route path = "/CustomerTable" exact component = {CustomerTable} />
<Route path = "/Admin" exact = {true} component = {Admin} />
<Route path = "/AMC" exact = {true} component = {AMC} />
<Route path = "/Complaint" exact = {true} component = {Complaint} />
<Route path = "/Employee" exact = {true} component = {Employee} />
<Route path = "/Profile" exact = {true} component = {Profile} />
<Route path = "/Schedule" exact = {true} component = {Schedule} />
<Route path = "/Site" exact = {true} component = {Site} />
<Route path = "/Zone" exact = {true} component = {Zone} />
</div>
: (
route === 'signin'
? <Signin loadUser={this.loadUser} onRouteChange={this.onRouteChange}/>
: <Register loadUser={this.loadUser} onRouteChange={this.onRouteChange}/>
)
}
<Footer />
</div>
);
}
}
export default App;
好像您可能沒有跟蹤狀態? 我的建議是讓redux
參與進來。 Redux是一種跟蹤狀態的簡便方法,而每次需要數據時都不會影響后端。 一開始將頭纏繞起來有點棘手,但是一旦記下頭,就永遠不會回頭。
Redux允許您跟蹤jwt或用於驗證前端身份驗證的任何內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.