node.jsでgoogle recaptcha v3の検証をする
クライアント側で取得したGoogle reCAPTCHA トークンの検証をNest.jsでやろうと思ったら、無駄にハマったのでメモ
tl;dr
データをapplication/x-www-form-urlencoded
で送れ
検証方法
公式のドキュメントで指定されているエンドポイントに対してPOSTでクライアントで取得したトークンとサーバーシークレットと一緒にリクエストする。
https://www.google.com/recaptcha/api/siteverify
ここで注意したいのは、ドキュメントには記載されていないがapplication/json
だと解釈してくれないのでapplication/x-www-form-urlencoded
で送る必要がある
Nest.jsのHttpModuleでは内部でaxiosが使われているので、axiosのドキュメントを参考にする
sample
以下Nest.jsのHttpModule*1を使用したサンプル
import * as qs from 'querystring' const data = { secret: '',// google recaptchaのサイトで見れるサーバーシークレット response: token, // クライアントで生成したトークン } const result = await this.httpService .post( 'https://www.google.com/recaptcha/api/siteverify', qs.stringify(data), ).toPromise()
リクエストが正常に処理された場合、result
にsuccess
という成功失敗のフラグや0〜1の間で表せられるscore
、error-codes
には失敗した場合の原因が入っています*2。例えばsecret
パラメーターが足りない場合などはmissing-input-secret
というエラーコードが入っています
*1:当然ですがfetchライブラリを使うなど別のhttp clientでも同じです
*2:https://developers.google.com/recaptcha/docs/verify#error_code_reference
2020年振り返り
もはや写真集を並べた画像を上げたいだけだが、今年も書く。
仕事
去年GCPメインでやっていくって記事に書いてたんだけど、会社のサービスをGCPで組んでてfirebase含め色んなサービスに手を出していて、その分awsに触れる事が余り無くなった。
労働環境としては、今年はコロナの影響で環境が色々変わってフレックスのリモートで仕事をしていたが、メンバー毎に生活してる時間が違うので、朝から働いてる人に合わせて朝から働いて、夜に作業してる人にチャットを返したりと起きてる時間のほとんどは仕事関連の何かをしているみたいな状態になっていた。
通勤もなくなって運動不足にもなるし、不眠みたいになってしまって体調がよくなかったので、来年はもうちょっとうまくやらないといけない。
アウトプット
本業でバタバタしていて特に何もできなかった。
Nest.jsを仕事で使っているのでそれで多少記事書いたり、うまくキーが取得できないので公開してないがiijmioのクーポン切り替え自動化するやつをgolangで作ったりしてみたが未だにgoのいい感じのコードの分け方がわかってない。
他にはulidのバリデーションがしたくてclass-validationの拡張作ったりした。
ラジオ
リモートになった結果、作業しながらガンガン聞けるので今年もすごく聞いた。やっぱりオードリーのANNが面白くて今年はリトルトゥースTシャツも買った。
最初は乃木坂さん目当てでレコメンを聞き始めたけど、オテンキ・のりさんのファンになってしまった。自分で振って反応に困らせた時とか、想像してた答えが返ってこない時の反応と速さと回収がうまい。
坂道グループ
コロナ禍において唯一の癒やしだった。夏のツアーもなかったので、毎週乃木坂工事中だけを楽しみに生きていた。
友達に日向坂を勧めまくった結果、自分よりも濃いおひさまを誕生させてしまったので東京ドームをぜひ当ててもらってこさかなのタオルを買いたい。
来年に向けて
2020年はgolangを書いてみようと思っていたが余り書く時間が取れず、できなかったので来年も継続的にgoをやっていこうと思っている。またその過程でgraphqlやgrpcを触ってみる予定。
ただ周りの極小範囲で余りNode.js*1やGolangをメインで使っているという話をあまり聞かないので、底辺エンジニアとしてはもうちょっと社会性っぽい言語*2を身につけるべきか?とは思うが今更Laravel等をやる気が起きないので、その分今年一年死ぬほど苦しんだ設計だったりDB設計に力を入れていきたいと考えている。
ただ今年結構忙しかったので、来年はちょっとゆっくりしたい
2020年課金したサービス
年末なので恒例のサブスク整理
今年はコロナで色々変わってしまったので色々増えた
Intellij IDEA
11,110円/年
一時周りに合わせてvscode使っていたんだけど、ショートカットを覚えてしまったのでやっぱ乗り換え面倒だな〜と思った結果、ほぼ全てintellijで書いてる。本当に全部intellijで書いてるのでAll product packの契約もあり。
vscodeはリモートで手伝ってくれてる人のコードをlive shareでデバッグしたりする時に使ってるので、使ってはいる。
GCP
100円未満/年
仕事で使うかな〜と思って始めたけど固定IPがお金かかるようになってたのに気づかなかったり、ちょっとテストしたりでたぶん100円くらいは払った。
firebaseも含めてるんだけど、両方とも個人の軽い用途であれば無料枠を超えないので遊んでてもそんなにお金かからない。
Google Domains
1,400円/年
また1年何もしてないことに気づいた…
しかし結構お気に入りのドメインなので、スパム的なのに使われたくないなーという気持ちからたぶん次も更新する。
amazon prime
4,400円/年
相変わらずお買い物よりもprime videoとprime readingを主に使っている。
買うほどじゃないんだよな〜みたいな雑誌がprime readingにあるととても嬉しい気持ちになる。
乃木坂mobile
330円/月
相変わらずライブに行くために契約してたんだけど、まさか全ツがないとは…
来年はライブあるといいな…
乃木坂モバイルメール
330円/月
ずっと継続してる人が遂に表題曲のセンターになってとてもめでたいし、毎日常可愛いので継続。
Youtube Premium
1,180円/月
音楽サブスクどれにしようか考えていた時に、youtube musicがyoutubeの動画もmusicの一部として扱うグレーなことをやってて、聞きたいものがサブスク解禁されていなかったので契約してた。
youtubeから広告が消えるのも大きいんだろうけど、無いことになれすぎて、ダウンロード機能がすごく重宝している。
家出る前にまいやんの動画だったり、かりんちゃんの動画だったり、技術系の動画をダウンロードして移動中だったりに見れるのがとても便利。
任天堂オンライン
2,400円/年
switchを手に入れて、有吉eeeeでやってるのが楽しそうだったのですごい今更スプラトゥーンを始めてしまった。無限に時間が溶ける割に全くエイムうまくならないので時間効果はとても悪いんだけど、友達とゲームするの久しぶりなのでとても楽しい。とりあえずりんくまぁぁは倒せそう。
まとめ
covid-19で外出自粛になった結果Youtube Premiumみたいなコンテンツサブスクの契約が増えた。上には書いてないけど乃木坂46動画とかHuluを契約したり、解約したりを繰り返していたりする。
去年どうしようかなーと思っていたj-westカードとかは年会費無料の期間が終わる時に、新幹線乗ることが当分ないだろうということで解約してしまった。一応ex-ic自体はamazon gold cardで契約できるっぽいので再度j-west契約することはないと思う。
試してたDisney Deluxeは契約してアイアンマンとかめちゃくちゃ見たんだけど、待っても待ってもスパイダーマンのホームカミングが配信されなかったので、配信されるまで契約をやめることにした。
来年は時間はできるけど、飽きるまではスプラをやり続けるだろうからサブスク色々解約するかも。