首页 > 解决方案 > Twitter使用Auth0获取token和secret token

问题描述

我使用 auth0 来获得 twitter 的身份验证,我使用 react native 并且我想使用 twitter 作为登录名,这是我的代码。

_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 并且由于 twitter 仍在使用 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?

标签: twittertokenauth0twitter-login

解决方案


推荐阅读