実現したいこと
Twitter風の投稿サイトにて外部APIを使用したSNS認証機能をこちらの記事を参考に実装しました。
Googleの方は実装できたのですが、Twitterの方が以下の状態で実装できません。
発生している問題
Userモデル内に定義したself.from_omniauth(auth)にて、infoの値がnilになってしまいユーザー情報が取得できません。
ruby:app/models/user.rb
1def self.from_omniauth(auth) 2 binding.pry 3 sns = SnsCredential.where(provider: auth.provider, uid: auth.uid).first_or_create 4 user = User.where(email: auth.info.email).first_or_initialize( 5 name: auth.info.name, 6 username: auth.info.first_name, 7 email: auth.info.email 8 ) 9 if user.persisted? 10 sns.user = user 11 sns.save 12 end 13 { user: user, sns: sns } 14 end 15
console
1[1] pry(User)> auth 2=> {"provider"=>"twitter", 3 "uid"=>"0000000000", 4 "info"=> 5 {"nickname"=>nil, 6 "name"=>nil, 7 "email"=>nil, 8 "location"=>nil, 9 "image"=>nil, 10 "description"=>nil, 11 "urls"=>{"Website"=>nil, "Twitter"=>"https://twitter.com/"}}, 12 13省略
その他該当のソースコード
ruby:app/controllers/omniauth_callbbacks_controllers.rb
1def twitter 2 authorization 3end 4 5def google_outh2 6 authorization 7end 8 9private 10 11def authorization 12 sns_info = User.from_omniauth(request.env["omniauth.auth"]) 13 @user = sns_info[:user] 14 if @user.persisted? 15 sign_in_and_redirect @user, event: :authentication 16 else 17 @sns_id = sns_info[:sns].id 18 render template: 'devise/registrations/new' 19 end 20end
また、Twiiter APIは以下のように設定しております。
Callback URL
"アプリのルートパス"/users/auth/twitter/callback
やってみたこと
Googleの方が正常に動作しているため、Twitter APIの設定の問題かと思い公式ドキュメントを読んでみましたが解決方法が見当たらず、他に同様の状況に陥った参考記事か見られませんでした。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。