Использование Auth0 для Twitter, чтобы получить токен и секретный токен - PullRequest
0 голосов
/ 09 марта 2019

я использую auth0, чтобы получить аутентификацию для твиттера, я использую реагировать нативно, и я хочу использовать твиттер в качестве логина, это мой код.

_loginWithAuth0Twitter = async () => {
    const redirectUrl = AuthSession.getRedirectUrl();
    const result = await AuthSession.startAsync({
        authUrl: `${auth0Domain}/authorize` + toQueryString({
            connection: 'twitter',
            client_id: auth0ClientId,
            response_type: 'token',
            scope: 'openid',
            redirect_uri: redirectUrl,
        }),
    });

после авторизации запроса, дайте мне этот результат

Object {
  "errorCode": undefined,
  "params": Object {
    "access_token": "8uDhJTvWFxpr6GpTfioXp_8wCtqfwDsW",
    "exp://127.0.0.1:19000/--/expo-auth-session": "",
    "expires_in": "7200",
    "scope": "openid",
    "token_type": "Bearer",
  },
  "type": "success",
  "url": "exp://127.0.0.1:19000/--/expo-auth-session#access_token=8uDhJTvWFxpr6GpTfioXp_8wCtqfwDsW&scope=openid&expires_in=7200&token_type=Bearer",
}

я получаю только acess_token, и с токеном доступа мало что можно сделать, так как твиттер все еще использует auth 1.0

я пытаюсь установить правила

Получить адрес электронной почты из Twitter

function (user, context, callback) {
  // additional request below is specific to Twitter
  if (context.connectionStrategy !== 'twitter') {
    return callback(null, user, context);
  }

  const oauth = require('oauth-sign');
  const uuid = require('uuid');

  const url = 'https://api.twitter.com/1.1/account/verify_credentials.json';
  const consumerKey = configuration.TWITTER_CONSUMER_KEY;
  const consumerSecretKey = configuration.TWITTER_CONSUMER_SECRET_KEY;

  const twitterIdentity = _.find(user.identities, { connection: 'twitter' });
  const oauthToken = twitterIdentity.access_token;
  const oauthTokenSecret = twitterIdentity.access_token_secret;

  const timestamp = Date.now() / 1000;
  const nonce = uuid.v4().replace(/-/g, '');

  const params = {
    oauth_consumer_key: consumerKey,
    oauth_nonce: nonce,
    oauth_signature_method: 'HMAC-SHA1',
    oauth_timestamp: timestamp,
    oauth_token: oauthToken,
    oauth_version: '1.0',
    oauth_callback:'https://pembersih.auth0.com/login/callback'
  };

  params.oauth_signature = oauth.hmacsign('POST', 
                                          url, 
                                          params, 
                                          consumerSecretKey, 
                                          oauthToken);

  const auth = Object.keys(params).sort().map(function (k) {
    return k + '="' + oauth.rfc3986(params[k]) + '"';
  }).join(', ');

  request.post(url, {
    headers: {
      'Authorization': 'OAuth ' + auth
    },
    json: true
  }, (err, resp, body) => {
    if (resp.statusCode !== 200) {
      return callback(new Error('Error retrieving email from twitter: ' + body || err));
    }
  });
}

тогда я получаю эту ошибку

Object {
  "errorCode": undefined,
  "params": Object {
    "error": "access_denied",
    "error_description": "Error retrieving email from twitter: [object Object]",
    "exp://127.0.0.1:19000/--/expo-auth-session": "",
  },
  "type": "success",
  "url": "exp://127.0.0.1:19000/--/expo-auth-session#error=access_denied&error_description=Error%20retrieving%20email%20from%20twitter%3A%20%5Bobject%20Object%5D",
}

как мне получить пользовательский токен и секретный токен , чтобы я мог использовать Twitter API?

...