所以我使用mongoid和純omniauth構建了一個webapp。我按照教程here,但我遇到了一個問題,其中mongodb試圖插入相同的記錄兩次,並拋出重複鍵錯誤。有什麼方法可以讓我找出第二個插入物是從哪裏來的?Omniauth,mongoid,pure omniauth,身份驗證嘗試插入兩次
這是從會議控制器代碼:
def create
auth = request.env["omniauth.auth"]
@user = User.where(:provider => auth['provider'], :uid => auth['uid']).first || User.create_with_omniauth(auth)
session[:user_id] = @user.id
redirect_to user_path(@user), :notice => "Signed in!"
end
這是用戶模型的代碼create_with_omniauth
def self.create_with_omniauth(auth)
create! do |user|
user.provider = auth['provider']
puts "finish provider"
user.uid = auth['uid']
puts "finish uid"
if auth['info']
user.name = auth['info']['name'] || ""
puts "finish name"
user.email = auth['info']['email'] || ""
puts "finish email"
user.oauth_token = auth.credentials.token
puts "made oath token"
user.save!
puts "Saving the user"
end
puts "outside if"
end
puts "about to exit"
end
所以在服務器日誌中我看到完成供應商,完成UID,完成名稱,完成電子郵件,製作宣誓標記,插入,然後保存用戶,如果在外面,即將退出,然後再插入。但是從會話控制器中的代碼我的用戶使用查詢或創建。我不知道我會在哪裏做另一個插入。
謝謝!
編輯:添加代碼
好的建議添加代碼。我確實在每一步之間都會將行打印到服務器上,以查看事件發生的位置,並將代碼與我在帖子中從服務器上看到的代碼相關聯。這足以說明我想要做什麼嗎? – jabbajac