Jos*_*rio 14 node.js reactjs passport.js
我有3个视图,(home,注册,登录)在reactJs中制作,我想在我的项目中使用护照,但我不知道该怎么做,我有护照配置,它的网址正在工作.
我可以做些什么来管理会话和用户数据,就像我们在ejs或jade中那样做?
客户端示例
import React, { useEffect, useState } from 'react';
import { Link } from "react-router-dom";
import axios from 'axios';
function Home() {
const [loggedIn, setLoggedIn] = useState(false);
useEffect(() => {
axios.get('/checkAuthentication')
.then(res => {
setLoggedIn(res.data.authenticated);
})
.catch((error) => {
setLoggedIn(false)
});
}, []);
return (
<div>
{loggedIn ? (
<p>Login success</p>
) : (
<div>
<Link to="/signup">
Signup
</Link>
<Link to="/login">
Login
</Link>
</div>
)}
</div>
);
}
export default Home;
Run Code Online (Sandbox Code Playgroud)
服务器端示例(如果设置了passport,则必须填充req.user)
app.get("/checkAuthentication", (req, res) => {
const authenticated: boolean = typeof req.user !== 'undefined'
res.status(200).json({
authenticated,
});
});
Run Code Online (Sandbox Code Playgroud)
小智 4
您需要创建一个中间件函数来放置代码
function ensureAuthenticated(req, res, next){
if(req.isAuthenticated()) {
return next()
} else {
res.redirect('/')
}
}
Run Code Online (Sandbox Code Playgroud)
然后在路由器中使用
app.get('/account', ensureAuthenticated, function(req, res){
// here return some data
})
Run Code Online (Sandbox Code Playgroud)
从 React 中你可能必须执行一个 fetch 请求
fetch('https://your_url/account', {
credentials: 'include'
})
Run Code Online (Sandbox Code Playgroud)
像这样的事情,你必须向服务器发出ajax请求或使用socket.io或websockets
| 归档时间: |
|
| 查看次数: |
14740 次 |
| 最近记录: |