Я пытаюсь получить доступ к данным пользователя после успешного входа в систему, а также из каждого компонента. Вот как я могу войти в систему:
router.post("/user/login",(req,res,next)=>{
passport.authenticate('local', function(err, user, info) {
console.log(JSON.stringify(user)) // here i got user data
if (err) { return next(err); }
if (!user) { return res.send("fail"); }
req.logIn(user, function(err) {
if (err) { return next(err); }
return res.send("success") // when client gets success message,it will do Router.push("/dashboard")
});
})(req, res, next);
})
Конфигурация сервера:
server.use(cookieParser())
server.use(bodyParser.json())
server.use(passport.initialize());
server.use(session({
secret: 'jumpingdonger',
resave: true,
saveUninitialized: true,
cookie : { secure : false, maxAge : (4 * 60 * 60 * 1000) }, // 4 hours
}))
//Passport Middleware
server.use(passport.initialize())
server.use(passport.session())
Страница панели инструментов:
import Header from '../components/Header'
import Layout from '../components/MyLayout.js'
import React, { Component } from 'react';
import axios from 'axios';
import Router from 'next/router'
export default class DashBoard extends Component{
constructor(props) {
super(props);
this.state = {
};
}
componentWillMount(){
console.log(this.props)
}
logout =()=>{
axios.get('/api/user/logout').then((result)=>{
if(result.data=="success"){
Router.push("/")
}
})
}
render(){
if(this.props.userData == undefined){
return(
<Layout>
<p>First you must login!</p>
</Layout>
)
}else{
return(
<Layout>
<p>Welcome to your dashboard {this.props.userData.userName}</p>
<a onClick={this.logout}>logout</a>
</Layout>
)
}
}
}
DashBoard.getInitialProps = async function(context) {
if(context.req !=undefined){ // which means that we are from server
return {
userData:context.req.user
};
}else{
return{}
}
}
Так что после успешного входа в систему я перенаправлен на страницу панели инструментов. Теперь в компоненте панели мониторинга я пытаюсь получить данные пользователя на getInitialProps
. Проблема в том, что я перенаправлен клиентом, использующим Router.push()
, я не могу получить данные на getInitialProps
если я не обновляю страницу из браузера. Если я обновляю, context.req.user
заполняется пользовательскими данными. Так как мне получить доступ к пользовательским данным с помощью маршрутизации на стороне клиента со страницы панели мониторинга, а также со всех других страниц? Что я не мог понять, так это то, что это помещает пользовательские данные в файл cookie, к которому я могу получить доступ от клиента, или это сеанс на стороне сервера?
спасибо
EDIT:
Я решил проблему, перенеся userData с сервера на клиент при успешном входе в систему и установив cookie на стороне клиента. Интересно, это правильное решение в этом случае?