googleapis / googleapis/google-api-nodejs-client

Refresh Access Token Inside Routes?

Offen
#2,834 4 Kommentare 0 Reaktionen 1 zugewiesene Person Auf GitHub ansehen

@bcoe arbeitet bereits daran.

Seit 08.11.2021.

type: question
Vorherrschende Sprache
TypeScript
Sterne
12.3k
Forks
2k
Ø Merge
1 T. 9 Std.
Gemergte PRs (30 T.)
24

Beschreibung

Do access_tokens automatically refresh when called inside of routes? My current implementation in React and Nodejs having followed this tutorial. I'm not sure how to refresh the access token and update in postgres seeing as this route sequence will only trigger when the user first authorizes.

Is there a better workflow I should use?

This GET route passes the url back to React. React then opens up the url in a new window.

router.get("/api/create/:userId", async function (req, res) {
  currentUserId = req.params.userId;

  const oauth2Client = new google.auth.OAuth2(
    CLIENT ID, CLIENT SECRET, REDIRECT_LINK
  );
  const scopes = [
    "https://www.googleapis.com/auth/drive",
    "https://www.googleapis.com/auth/userinfo.profile",
  ];
  const url = oauth2Client.generateAuthUrl({
    access_type: "offline",
    scope: scopes,
    state: JSON.stringify(currentUserId)
  });

axios
    .get(url).then(function (response) {
      res.send({ url });
    }).catch(function (error) {
      console.log(error);
    });
});

When the user successfully authorizes, they are sent to the redirect URI and this route triggers. The access token and refresh token are then saved to postgres:

router.get("/api/testgoogleapi", async function (req, res) {
  const queryUrl = new urlParse(req.url);
  const code = queryParse.parse(queryUrl.query).code;
  
  const oauth2Client = new google.auth.OAuth2(
    CLIENT ID, CLIENT SECRET, REDIRECT_LINK
  );

  const tokens = await oauth2Client.getToken(code);

  oauth2Client.setCredentials({ access_token: tokens.tokens.access_token, refresh_token: tokens.tokens.refresh_token });

  let access_token = tokens.tokens.access_token;
  let refresh_token = tokens.tokens.refresh_token;

  var oauth2 = google.oauth2({
    auth: oauth2Client,
    version: "v2",
  });

  let { data } = await oauth2.userinfo.get(); // get user info

  try {
    const updateUser = await pool.query(
      `UPDATE org_user SET google_api_id = '${data.id}',  google_api_refresh_token = '${refresh_token}', google_api_access_token = '${access_token}' WHERE id = '${currentUserId}'`
    );
  } catch (err) {
    console.log(err);
  }
});

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.