add:RoR deviceとomniauth-githubで認証を実装しようとして苦労した事
前提
- 凄い初歩的なことです
環境
- Cloud9(NotAWS)
参考
- deviceのWikiにある例
- これを雛形にしてるブログが多かった。
- 自信ないけど、Githubから得られるuserdate
- Githubから〜
- RailsでいろんなSNSとOAuth連携/ログインする方法
- 多すぎるので省略。
結論
- Cloud上のは、App登録時にlocalで登録するとエラーになることがある。
- rollback transactionでもInvalid credentialsは起こる。
- omniauthのコールバックデータはenv['omniauth.auth'].user か env['omniauth.auth'].info で取り出す。
状況
- このウェブページにアクセスできません
- Could not authenticate you from GitHub because "Invalid credentials".
- 色々諦めたら、既存データに若い順からログインしていく謎仕様に……
- 受け取ってるはずのデータを正しく受け取れない
原因と対処とか
- ChromではヒントがなさすぎてSafariで見たら、リダイレクトURLが違ってるってエラー文が出てた。
- 【結論】Cloud上なので、GithubのApp登録でちゃんとURL設定しようね!でした。
- これはすぐ終わったから良かったのだけど……
- 【結論】Cloud上なので、GithubのApp登録でちゃんとURL設定しようね!でした。
- 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等から戻しつつ試す
- 問題があるはずなのに、一番古いユーザーにログインしてしまう以外、何も動作に問題がない
- とりあえず、悟りの境地を開いて、見なかった振り
- とりあえず、変数を辞めてuser_nameとかemailに定数入れて、idの類の登録もやめる -> 何故か、登録済みのテストデータでログイン
- 名前とか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 で取り出す。