ねこものがたり

いちにちいっぽ

OmniAuthのTwitter認証でつまずいたこと

Twitter認証ってよく見るのに実装はこんなに難しいなんて・・・

と思ったので、引っかかったこととその対応をまとめておきます。

omniauth-twitterのgemを入れた後の話。 基本的なコードはOmniAuth: Overview · plataformatec/devise Wiki · GitHub に則っています。

Twitter側(settingタグ内情報)

Twitter Application Management ここから"Create New App"を押してアプリケーションを登録する。

f:id:neko314:20180429192342p:plain

f:id:neko314:20180429192140p:plain

①はhttp://172.0.0.1:3000 が良さそう。 でもここは無効な形式でなければダミーで良いらしく、全く違うのをいれても大丈夫だった。

②は①と同じでダミーでも登録できるけれど、callbackした時のURLを入力するといい。 何もなければroute infoで該当するのを入れておくと無難かもしれない。 f:id:neko314:20180429193414p:plain

③ここが一番盲点でした。 このチェックボックスは多分デフォルトで選択されているんですが、そのままだと動かした時にエラーが出てしまっていました。 詳しい仕組みはちょっとまだわかっていないのですが、サインインやサインアップ時には都度session情報などを含むリクエストを送るはずなので、その辺が関係あるのかな〜と推測。まあ、全然わかってないので的外れかも。

コード側(OmniauthCallbacksController)

冒頭で述べたとおり、deviseのwiki上にあるomniauthについての情報を元にコントローラーを書いていったのですが、そうすると”ActionDispatch::Cookies::CookieOverflow”というエラーが出ました。

そのため、コントローラーのコードを変更しました。

変更前

session["devise.twitter_data"] = request.env["omniauth.auth"]

変更後

session["devise.twitter_data"] = request.env["omniauth.auth"].except("extra")

その他

まだエラーが残っていて、これだけだとうまくいっていないのだけれど、また調べて解消したら備忘録としてまとめておきたいと思います。

参考サイト

twitter_oauthでOAuth::Unauthorized 401 Authorization Requiredとなる - hogashi.*

ActionDispatch::Cookies::CookieOverflow エラー | EasyRamble

国際化と地域化

i18nって初めて聞いたのでまとめ。

原語(英語)のrailsガイドを一番最初に読んだけどよくわらかん。困ったことに日本版のページ読んだけれどもそれも分からない。絶望的である。

抽象論と具体論っていうのがあるけど、読んでいる最中に自分の中に具体論が浮かんでこなかったので、後日読み返した時に、私でもわかる言葉を残しておきたいと思います。

i18n:国際化 L10n:地域化

i18nの読み方は「あいじゅうはちえぬ」とか「アイエイティーンエヌ」とか。

L10nは「えるじゅうえぬ」「エルテンエヌ」とか。

I18Nは、特定の地域の言語や慣習に縛られないようにソフトウェアを構築することを意味するが、L10Nは、他国で作られたものや、I18N化されたものを特定地域での利用が可能なように変更することを意味する。たとえば、米国で開発されたソフトウェアで日本語を使えるようにすることは、L10Nである。

国際化する内容

だいたいこの辺は必須らしい。

  • 文字セット(標準の文字コードなど)
  • 文字の方向性(左から右へ、右から左へ、左に向かって上から下へ、他)
  • 文言
  • 書式
  • 数値(小数点の文字、桁区切りの文字、区切る桁数など)
  • 日時(年月日の表記の仕方、イスラム暦/グレゴリオ暦/ユダヤ暦/和暦など使用する暦の違い、他)
  • 日時情報の時差
  • 通貨情報

Ruby on Railsi18n

rubyの場合は、rubygemが作られているとあったので検索かけたら出てきました。

i18n | RubyGems.org | your community gem host

このgemがRailsに同梱されているそうです。 rubygemなので単独で利用することもできるみたいで、ググってみたら「使ってみた」系の記事たくさんありました。

「英語喋れないなんて!」ってならないようにするということとと、とはいえいろんな文化の違いに対応する"when in Roma, do as the Romans do."精神を反映したのがi18nっぽい。

用語メモ

単語 意味
ロケール 国や地域の設定のこと

参考サイト

Rails国際化 (I18n) API | Rails ガイド

i18nとは - はてなキーワード

国際化と地域化 - Wikipedia

L10Nとは - OSS用語 Weblio辞書

ロケール(ロケール)とは - コトバンク