add:RoR deviceとomniauth-githubで認証を実装しようとして苦労した事

前提

  • 凄い初歩的なことです

環境

  • Cloud9(NotAWS)
    • rvmとかgemとか
      • Ruby 2.5.1
      • Rails 5.1.6
      • device 4.4.3
      • omniauth 1.8.1
      • omniauth-oauth2 1.5.0
      • omniauth-github 1.3.0

参考

結論

  • Cloud上のは、App登録時にlocalで登録するとエラーになることがある。
  • rollback transactionでもInvalid credentialsは起こる。
  • omniauthのコールバックデータはenv['omniauth.auth'].user か env['omniauth.auth'].info で取り出す。

状況

  1. このウェブページにアクセスできません
  2. Could not authenticate you from GitHub because "Invalid credentials".
    • 色々諦めたら、既存データに若い順からログインしていく謎仕様に……
  3. 受け取ってるはずのデータを正しく受け取れない

原因と対処とか

  1. ChromではヒントがなさすぎてSafariで見たら、リダイレクトURLが違ってるってエラー文が出てた。
    • 【結論】Cloud上なので、GithubのApp登録でちゃんとURL設定しようね!でした。
      • これはすぐ終わったから良かったのだけど……
  2. Could not authenticate you from GitHub because "Invalid credentials".
    • コードは(多分)ちゃんとしてるのに、繋がらない。
    • OmniAuth OAuth2 1.4.0 以降で `Invalid Credentials` エラーの記事を見つけるも、2年前だしなんか違う気がする。
    • devの表示も出ない……ので、サーバーのログ見たら、登録の動作の所でbigin transaction -> rollback transaction
      • ご丁寧に、サバーログにファイルの行数まで載ってる
    • 【推測】登録で何か起こってる
      • とりあえず、変数を辞めてuser_nameとかemailに定数入れて、idの類の登録もやめる -> 何故か、登録済みのテストデータでログイン
        • とりあえず、悟りの境地を開いて、見なかった振り
          • 問題があるはずなのに、一番古いユーザーにログインしてしまう以外、何も動作に問題がない
            • id等から戻しつつ試す
  3. 名前とかGithubからのデータ取得が上手く行ってない事に気付く
    • 取得の文法がgithubにもググっても無いので、ググってコピペを繰り返す。
    • omniにはそれぞれのサイト見てねって書いてあるし、userに格納されてないしで、ググってコピペを続ける
    • 【結論】おま環かもしれない
      • RailsでいろんなSNSとOAuth連携/ログインする方法こちらのサイトので上手く行った
      • request.env["omniauth.auth"]を受け継いだ変数を、
        • name: omniauth['info']['name']は駄目で
        • info = omniauth['info']にした後、name: info['name']が通った。
          • 解せぬ。
          • 文法がわかったので、emailとか他のデータも自由自在。解せぬ。とりあえず、infoに入ってた。
          • emailとかプロフに設定してないと空だって書いてあったのに、プロフが空でも取り出せたのが謎。
        • OmniAuthで独自認証機構を作る - 鍋の底この記事書きながら見つけた。infoとuserでアクセスできるらしい。
    • 【結論】omniauth-githubのコールバックデータはenv['omniauth.auth'].user か env['omniauth.auth'].info で取り出す。

ぼやき

  • twitter devが300字以内のプレゼン必要で、omni使うだけなのに時間かかりそうでやめました。
    • twitterはもうbotとか作らないで、dev不要な、適当なアプリ組み合わせたほうが早そう。
      • 凄い簡単なのはIFTTTでやらせてるし……
  • Githubだと、ReadMeからHowToリンク貼ってあるのばかりで今回気付かなかったけど、Wikiも見る習慣をつけようと思う。
  • 文法は本当に大事なので、懇切丁寧にわかりやすく、よく覚えたいと思います。というか、どこにデータ入ってるかとか知る方法無いんだろうか……
  • dotenv使い始めたけど、qiitaの記事が気になって、使い続けて良いのか悩む。
  • こんなのでこんなに時間かけたのが悲しい。