Я сделал сервер, который проверяет токен доступа (google).
токен. js
import passport from 'passport';
import { Strategy as GoogleTokenStrategy } from 'passport-google-token';
import * as dotenv from 'dotenv';
dotenv.config();
const GoogleTokenStrategyCallback = (
accessToken,
refreshToken,
profile,
done
) =>
done(null, {
accessToken,
refreshToken,
profile,
});
passport.use(
new GoogleTokenStrategy(
{
clientID: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
},
GoogleTokenStrategyCallback
)
);
const authenticateGoogle = (req, res) =>
new Promise((resolve, reject) => {
passport.authenticate(
'google-token',
{ session: false },
(err, data, info) => {
if (err) {
reject(err);
}
resolve({ data, info });
}
)(req, res);
});
module.exports = { authenticateGoogle };
user.mutation. js
export const Mutation = {
signInWithGoogle: async (obj, args, { db, req, res }) => {
// insert a token into the request.
req.body = {
...req.body,
access_token: args.accessToken,
};
try {
const { data, info } = await authenticateGoogle(req, res);
if (data) {
// obtain an email from the google profile
const {
profile: {
_json: { email },
},
} = data;
...
как и выше, сервер получит токен доступа от пользователя. До того, как я это сделал, я не думал о том, откуда пользователи получат токен доступа.
Я искал по этому поводу inte rnet, но все примеры (только я нашел) используют их сервер для моста (URL перенаправления) между веб-интерфейсом и Google.
Но я хочу разделить серверы каждого из них. как
[Frontend (React) Server] - [Backend GraphQL Server]
Вот почему я сделал функцию проверки google-access-token. Как пользователи могут получить токен доступа от Google без my-frontend-server?
Должен ли я иметь свой собственный сервер для этого?