ナツ17:OmniauthのSQLite3::SQLException: no such column: users.provider問題(facebook, twitter)

前回の練習用アプリでOmniauth, DeviseによるFacebook, Twitter認証を断念したんやけど、
今回の練習用アプリでSNS認証はクリアしたいので再チャレンジ。

参考にしたサイトは前回と同様、deviseでfacebook,twitter認証-Qiitaってところで、丁寧に書かれてる。

ただ、多分この通りやると、FacebookTwitterへ認証画面が飛んで、元のサイトに戻ってくるときに

SQLite3::SQLException: no such column: users.provider: SELECT "users".* FROM "users" WHERE "users"."provider" = 'facebook' AND "users"."uid" = '929272' LIMIT 1

ってエラーが出るんじゃないかな?
(前回も出てて、このエラーの意味が全くわからず断念した)

で、今回は、

$ rails db
$ sqlite> .alter table users add column provider[string];

で解決できた。必要なカラム足りてなかったのね。

上記の参考サイトで、

$ rails g migration AddOmniToUser uid:integer
 migrationファイルにて、omniauth認証用カラム追加

って書いてあって、多分ここで

$ rails g migration AddOmniToUser uid:integer provider:string
 migrationファイルにて、omniauth認証用カラム追加

ってやっとかないと、俺の場合はエラー出た。

おそらく次のアプリでもSNS認証は入れるから、備忘録!
最近徐々にエラーの意味がわかってきた٩(๑- -๑)۶

【追記】
twitter認証から戻ってきたら、
CookieOverflowというエラーが出たので、その対処法もメモっとく。

config/initializers/session_store.rb

(App)::Application.config.session_store :cookie_store, :key => 'xxx'

(App)::Application.config.session_store :active_record_store

に変更。

このままだと、sessionってのが見つからないよ〜ってエラーが出るので、

$ rake db:sessions:create
$ rake db:migrate

ってして、もう一度サーバー立ち上げる。そしたらOK。

※認証画面から戻ってくるのはTwitterFacebookもできたけど、
一回パスワード登録してログアウトして、再びSNSログインしてもまたSignupの画面に飛ばされる。
既存ユーザーの認識されてないっぽいんやけど、なぜだ。

【追記2】
上記のSignup画面に飛ばされる問題をFacebookの方では解決できた。

models/user.rb

 def self.create_with_omniauth(auth)
  create!do |user|
   user.provider = auth["provider"]
   user.uid = auth["uid"]
   user.name = auth["user_info"]["name"]
   user.screen_name = auth["user_info"]["nickname"]
  end
 end

を追加すればFacebookログイン完了。

広告を非表示にする