Как отправить запрос на сервер с клиента, клиент - next.js, а сервер - express.js.
Я пытаюсь реализовать аутентификацию Google, на сервере у меня есть маршруты, которые перенаправят меня на аутентификацию Google.:
Класс 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 route (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;
Любые советы или помощь приветствуются!