VSCode 拡張機能開発で OAuth 認証 - 2.5
やったことはaxios
を追放して、request
及びoauth
モジュールで OAuth 認証を完了させたところ。すまんaxios
。
startOAuth = async () => { const oauth = new OAuth.OAuth( api.TMP_CREDENTIAL_REQUEST_URL, api.USER_TOKEN_URL, api.COMSUMER_KEY, api.COMSUMER_SECRET, '1.0', 'oob', 'HMAC-SHA1' ); //リクエストトークン取得 await oauth.getOAuthRequestToken({ "scope": "read_public,write_public,read_private" }, async (err, request_token, request_token_secret, results) => { console.log('==============='); console.log(err); console.log("request token: " + request_token); console.log('==============='); console.log('redirectUrl: ' + api.RES_OWNER_AUTH_URL + '?oauth_token=' + request_token); //ヘッダーを定義 const headers = {'Content-Type':'application/json'}; //オプションを定義 const loginOptions = { url: api.LOGIN_URL, method: 'POST', headers: headers, json: true, form: account }; //Cookie取得してログイン状態にする await request(loginOptions, async (error, response, body) => { const cookie = response.headers['set-cookie']; if (error === null && cookie !== undefined){ const _rk = (cookie as string[])[5].match("(rk=.*); domain"); if (_rk !== null){ const rk = _rk[1]; console.log('rk: ' + rk); const reqTokenOptions = { url: api.RES_OWNER_AUTH_URL, qs: { oauth_token: request_token }, method: 'GET', headers: { cookie: rk } }; //Cookie付与してリダイレクト await request(reqTokenOptions, async (err, res, body) => { console.log(err); console.log(res); const data = body as string; const _rkm = data.match("name=\"rkm\" value=\"(.*)\""); if (_rkm !== null){ const rkm = _rkm[1]; console.log('rkm: ' + rkm); const verifierOptions = { url: api.RES_OWNER_AUTH_URL, qs: { oauth_token: request_token, rkm: rkm }, method: 'POST', headers: { cookie: rk } }; //許可ボタン押下相当のリクエスト送ってverifier取得 await request(verifierOptions, async (err, res, body) => { const data = body as string; const _verifier = data.match("<div class=verifier><pre>(.*)</pre></div>"); if (err === null && _verifier !== null){ const verifier = _verifier[1]; console.log('verifier: ' + verifier); //Access Token の取得 await oauth.getOAuthAccessToken(request_token, request_token_secret, verifier, (err, accessToken, accessTokenSecret, parsedQueryString) => { if (err === null){ console.log(">>>Congraturations!!<<<"); console.log('AccessToken: ' + accessToken); console.log('AccessTokenSecret: ' + accessTokenSecret); console.log('ParsedQueryString: ' + parsedQueryString); this.accessToken = accessToken; this.accessTokenSecret = accessTokenSecret; } else { console.log(err); } }); } }); } }); } } else { console.log(error); } }); }); }
request
モジュールだけで事足りるやんけー(´・ω・`)シランガナ
でもやっぱりネスト深くなりすぎなのでなんとかしたい。ひとつの非同期処理が終わるとその値を受け取って次の非同期処理を開始する処理ってどういう形で実装すればいいんかな?