passport-oauth2 icon indicating copy to clipboard operation
passport-oauth2 copied to clipboard

Suggested way to read User profile from other routes

Open harrylincolnBULB opened this issue 5 years ago • 0 comments

Hi there,

Struggling to understand how to pull out User on other routes that are mounted with Koa.

SETUP:

server.koaApp.use(koaSession(
  {
    key: sessionKey,
    rolling: true,
    maxAge: sessionMaxAge,
    sameSite: 'none',
    secure: true,
    // @ts-ignore
    domain: undefined
  },
  server.koaApp,
));

// set up passport sessions here
function createPassport() {
  const passport = new KoaPassport();

  passport.use(new OAuth2Strategy({
    authorizationURL: oauthClientAuthUrl,
    tokenURL: oauthClientTokenUrl,
    clientID: oauthClientId,
    clientSecret: oauthClientSecret,
    callbackURL: oauthClientRedirectUrl,
  }, function(accessToken, refreshToken, params, profile, cb) {
    cb(null, {id: 'somedudesID', accessToken});
  }));

  passport.serializeUser((user, done) => {
    done(null, user);
  });

  passport.deserializeUser((user, done) => {
    done(null, user);
  });

  return passport;
};

const passport = createPassport();
server.koaApp.use(passport.initialize());
server.koaApp.use(passport.session());

ROUTES:

router.get(
      '/login',
      passport.authenticate('oauth2')
    );

    router.get('/authorize', passport.authenticate('oauth2'), (ctx: any) => {
        const { accessToken } = ctx.session.passport.user;
        ctx.state.accessToken = accessToken;
        ctx.status = 200;
      });

    router.get('/get-token-from-state', (ctx: any) => {
      console.log(ctx.state.accessToken); // undefined
    });

Question: Should I be trying to persist the accessToken to state? Surely there's a way to pull this out of the ctx object when calling the route /get-token-from-state ? Can i use the session?

harrylincolnBULB avatar Mar 16 '20 16:03 harrylincolnBULB