如何从客户端向服务器发送请求,客户端是next.js,服务器是express.js。
我正在尝试在服务器上实现google auth,我的路由会将我重定向到google auth:
服务器上的AuthController类:
export default class AuthenticationController {
public static async authGoogle(
req: Express.Request,
res: Express.Response,
next: () => void
): Promise<void> {
passport.authenticate('google', { scope: ['https://www.googleapis.com/auth/plus.login'] })(
req,
res,
next
);
}
public static async authGoogleCallback(
req: Express.Request,
res: Express.Response
): Promise<void> {
passport.authenticate('google', {}, (err, user: User) => {
res.setHeader('Content-Type', 'application/json');
if (err) {
logger.error('Login failed', err, JSON.stringify(user));
res.status(500);
res.send({
message: 'Login failed',
success: false
});
} else {
logger.debug(`User ${user.id} logged in`);
res.status(200);
res.cookie('jwt', 1);
res.send({
message: 'User logged in',
success: true,
token: `${jsonwebtoken.sign(
JSON.stringify(user),
process.env.JWT_SECRET || 'DONT_USE_IN_PROD'
)}`
});
res.redirect('/');
}
res.end();
})(req, res);
}
这是服务器上的身份验证路由器:
export function authenticationRouter(): Router {
const router = Router();
export function addGoogleRoutes(router: Router): Router {
// Google auth routes
router.get('/google', AuthenticationController.authGoogle);
router.get('/google/callback', AuthenticationController.authGoogleCallback);
return router;
}
主要问题是,我不了解如何从登录组件访问服务器,如何发送请求以及如何在服务器上执行Google路由(addGoogleRoutes)
上的路由。
这是next.js中客户端的登录组件/页面:
class Login extends React.Component {
static async getInitialProps() {
return {};
}
handleClick = () => {
console.log('handle click');
fetch.post('point google auth route on server');
};
render() {
return (
<LoginLayout title="Login Page">
<button className="login-field" onClick={this.handleClick}>
Login with Google
</button>
</LoginLayout>
);
}
}
export default Login;
欢迎任何建议或帮助!