ナツ17:OmniauthのSQLite3::SQLException: no such column: users.provider問題(facebook, twitter)
前回の練習用アプリでOmniauth, DeviseによるFacebook, Twitter認証を断念したんやけど、
今回の練習用アプリでSNS認証はクリアしたいので再チャレンジ。
参考にしたサイトは前回と同様、deviseでfacebook,twitter認証-Qiitaってところで、丁寧に書かれてる。
ただ、多分この通りやると、FacebookやTwitterへ認証画面が飛んで、元のサイトに戻ってくるときに
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。
※認証画面から戻ってくるのはTwitterもFacebookもできたけど、
一回パスワード登録してログアウトして、再び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ログイン完了。