Как я могу использовать токен доступа, предоставленный Passport JS позже? - PullRequest
0 голосов
/ 25 июня 2019

Я экспериментирую с Spotify API и использую Node JS, Express, React, Passport JS. Я проверяю подлинность с помощью паспорта JS, и в настройке есть параметр, который является маркером доступа. С этим токеном доступа я могу получить доступ к библиотеке пользователя и другой информации. Но я не уверен, как получить доступ к этому токену доступа позже. Я хочу использовать его, когда пользователь нажимает определенную кнопку, а не когда пользователь входит в систему. Как я могу «сохранить» этот токен доступа или получить к нему доступ позже?

Я попытался вернуть токен доступа после "done (err, user)", но я не знаю, куда он возвращается.

это мой паспорт:

passport.use(
  new SpotifyStrategy(
    {
      clientID: keys.spotify.clientID,
      clientSecret: keys.spotify.clientSecret,
      callbackURL: "/callback"
    },
    function(accessToken, refreshToken, expires_in, profile, done) {
      User.findOrCreate({
        where: {
          user_spotify_id: profile.id,
          username: profile.username,
          email: profile._json.email,
          country: profile.country,
          birthdate: profile._json.birthdate
        }
      }).then(([user, created]) => {

        done(null, user);
        // return accessToken;
      });
    }
  )
);

1 Ответ

1 голос
/ 25 июня 2019

Я бы попробовал один из этих вариантов.

  1. Иметь столбец в пользовательской таблице / модели, который называется "spotifyAccessToken", и сохранять его там.

  2. Или иметь отдельную таблицу, в которой хранятся токены доступа с внешним ключом для пользовательской таблицы.

Когда пользователь выйдет из системы, уничтожьте токен.

passport.use(
  new SpotifyStrategy(
    {
      clientID: keys.spotify.clientID,
      clientSecret: keys.spotify.clientSecret,
      callbackURL: "/callback"
    },
    function(accessToken, refreshToken, expires_in, profile, done) {
      User.findOrCreate({
        where: {
          user_spotify_id: profile.id,
          username: profile.username,
          email: profile._json.email,
          country: profile.country,
          birthdate: profile._json.birthdate
        }
      }).then(([user, created]) => {

        // store access token
        User.update({
          spotifyAccessToken: accessToken
        }, {
          where: {
            id: user.id
          },
          returning: true // returns the user after update
        }).then(result => {
          user = result[1][0]; // get user

          done(null, user);
        });
      });
    }
  )
);
...