Reactjs 如何从Google OAuth维护accessToken?
我正在尝试用MERN堆栈实现googleoauth 有一个很好的博客,如下图所示 我使用react google登录作为前端,passport、passport google令牌和jsonwebtoken作为后端。 在express js获得accessToken并创建用户文档之前,一切都很好,但我实际上不知道下一步是什么来保持登录和验证它。上面的文章提到了这个问题,但他还没有实现 有什么信息可以解决这个问题吗 步骤7:将JWT令牌返回到前端。您对该令牌所做的操作不在本教程的范围内,但可能应该使用它来验证每个登录用户的操作 我的代码如下Reactjs 如何从Google OAuth维护accessToken?,reactjs,express,jwt,passport.js,Reactjs,Express,Jwt,Passport.js,我正在尝试用MERN堆栈实现googleoauth 有一个很好的博客,如下图所示 我使用react google登录作为前端,passport、passport google令牌和jsonwebtoken作为后端。 在express js获得accessToken并创建用户文档之前,一切都很好,但我实际上不知道下一步是什么来保持登录和验证它。上面的文章提到了这个问题,但他还没有实现 有什么信息可以解决这个问题吗 步骤7:将JWT令牌返回到前端。您对该令牌所做的操作不在本教程的范围内,但可能应该
import React from 'react';
import GoogleLogin from 'react-google-login';
import api from '../config/api';
import { useGlobalState } from '../config/globalState';
import { AUTH_SIGN_IN, SET_USER } from '../config/types';
const Navbar = () => {
const { state, dispatch } = useGlobalState();
const { isLoggedIn } = state;
const responseGoogle = async (data) => {
try {
const { accessToken } = data;
const res = await api.post('/api/auth/signin', {
access_token: accessToken
});
console.log('res.data:', res.data);
dispatch({ type: AUTH_SIGN_IN });
} catch (err) {
console.log('err: ', err.message);
}
};
return (
<div>
This is the title
{
!isLoggedIn &&
<GoogleLogin
clientId={process.env.REACT_APP_GOOGLE_CLIENT_ID}
buttonText="Login with Google"
onSuccess={responseGoogle}
onFailure={responseGoogle}
/>
}
</div>
)
}
export default Navbar
这是/api/auth/signin路由处理部分
const JWT = require('jsonwebtoken');
const User = require('../models/user');
const signToken = user => {
return JWT.sign({
iss: 'AnySecret',
sub: user.id,
iat: new Date().getTime(),
exp: new Date().setDate(new Date().getDate() + 1)
}, process.env.JWT_SECRET);
}
module.exports = {
signIn: async (req, res) => {
console.log('signIn called');
const token = signToken(req.user);
res.cookie('access_token', token, {
httpOnly: true
});
res.status(200).send({
user: req.user,
token
});
}
}
const JWT = require('jsonwebtoken');
const User = require('../models/user');
const signToken = user => {
return JWT.sign({
iss: 'AnySecret',
sub: user.id,
iat: new Date().getTime(),
exp: new Date().setDate(new Date().getDate() + 1)
}, process.env.JWT_SECRET);
}
module.exports = {
signIn: async (req, res) => {
console.log('signIn called');
const token = signToken(req.user);
res.cookie('access_token', token, {
httpOnly: true
});
res.status(200).send({
user: req.user,
token
});
}
}