如何在没有会话的情况下整合passport-facebook和jwt?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在没有会话的情况下整合passport-facebook和jwt?相关的知识,希望对你有一定的参考价值。
我想使用passport-github或facebook登录jwt令牌,而不使用服务器上的保存会话。但是我们有两个来自前端的请求:
app.get('/auth/facebook',
passport.authenticate('facebook'));
app.get('/auth/facebook/callback',
passport.authenticate('facebook', { failureRedirect: '/login' }),
function(req, res) {
// Successful authentication, redirect home.
res.redirect('/');
});
如何处理前端代码?
在正常情况下,我们只有一个请求
axios.post(`${API_URL}/auth/login`, { email, password })
.then(response => {
cookie.save('token', response.data.token, { path: '/' });
dispatch({ type: AUTH_USER });
window.location.href = CLIENT_ROOT_URL + '/dashboard';
})
.catch((error) => {
errorHandler(dispatch, error.response, AUTH_ERROR)
});
}
所以我们可以在本地保存令牌。但是对于passport-facebook,我们有两个请求('/ auth / facebook'和'/ auth / facebook / callback')。那么如何在本地保存令牌呢?
答案
首先,我认为GET请求不起作用。您需要使用链接来触发/ auth / login。
<a href="http://localhost:5150/auth/facebook">
要将令牌发送到客户端,您应该重定向到客户端页面,其中jwt存储在cookie中。
const token = user.generateJwt();
res.cookie("auth", token);
return res.redirect(`http://localhost:3000/socialauthredirect`);
并在客户端登录页面提取jwt并将其保存到本地存储。
class SocialAuthRedirect extends Component {
componentWillMount() {
this.props.dispatch(
fbAuthUser(getCookie("auth"), () => {
document.cookie =
"auth=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
this.props.history.push("/profile");
})
);
}
render() {
return <div />;
}
}
以上是关于如何在没有会话的情况下整合passport-facebook和jwt?的主要内容,如果未能解决你的问题,请参考以下文章
Session管理 --《springboot与shiro整合》
如何在不使用请求的情况下删除 Laravel 5.3 中的会话?