前提・実現したいこと
Rails5でdeviseとtwitterで認証機能を作ろうとしています。
twitterの認証ページに遷移し、作成中のrailsプロジェクトに戻る際にエラーが発生します。
エラーメッセージからemailがおかしい?と思うのですが、解決策が見つかりません。
何とぞご教示お願い致します。
発生している問題・エラーメッセージ
ActiveRecord::NotNullViolation in Users::OmniauthCallbacksController#twitter
SQLite3::ConstraintException: NOT NULL constraint failed: users.email: INSERT INTO "users" ("email", "encrypted_password", "created_at", "updated_at", "provider", "uid", "image", "name") VALUES (?, ?, ?, ?, ?, ?, ?, ?)
Extracted source (around line #13):
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
該当のソースコード
ruby
1#user.rb 2 3class User < ApplicationRecord 4 # Include default devise modules. Others available are: 5 # :confirmable, :lockable, :timeoutable and :omniauthable 6 devise :database_authenticatable, :registerable, 7 :recoverable, :rememberable, :trackable, :validatable, :omniauthable, omniauth_providers: [:facebook, :twitter] 8 9 def email_required? 10 false 11 end 12 # omniauthから対応するuserを取得する 13 def self.from_omniauth(auth) 14 # どのSNSで認証したかをproviderで判定 15 where(provider: auth.provider, uid: auth.uid).first_or_create do |user| 16 user.email = auth.info.email 17 user.password = Devise.friendly_token[0,20] 18 user.name = auth.info.name # assuming the user model has a name 19 user.image = auth.info.image # assuming the user model has an image 20 end 21 end 22
ruby
1#omniauth_callbacks_controller.rb 2 3def twitter 4 5 @user = User.from_omniauth(request.env['omniauth.auth']) 6 7 if @user.persisted? 8 sign_in_and_redirect @user, event: :authentication 9 set_flash_message(:notice, :success, kind: "Twitter") if is_navigational_format? 10 else 11 session["devise.twitter_data"] = request.env["omniauth.auth"].except("extra") 12 # エラーの場合、表示させる 13 14 15 puts "失敗" 16 puts @user.errors 17 18 redirect_to new_user_registration_url 19 end 20 end
ruby
1#routes.rb 2devise_for :users, controllers: { omniauth_callbacks: 'users/omniauth_callbacks', registrations: 'registrations' } 3
補足情報(FW/ツールのバージョンなど)
[環境]
Ruby 2.3.3
Rails 5.1.5
Windows 10
あなたの回答
tips
プレビュー