2014-01-24 26 views
0

所以我使用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,完成名稱,完成電子郵件,製作宣誓標記,插入,然後保存用戶,如果在外面,即將退出,然後再插入。但是從會話控制器中的代碼我的用戶使用查詢或創建。我不知道我會在哪裏做另一個插入。

謝謝!

編輯:添加代碼

回答

1

你平時調試的東西是要麼經過調用一步一步的方式 - 你可以使用REPL這一點,像PRY。另一個選擇是執行二進制消除 - 在代碼中的某個時刻開始,確保問題出現在該點之前還是之後,在該方向移動下一個斷點,然後重複此操作,直至縮小原因。

總體而言,除非您提供的代碼不工作或僅提供更多信息,否則很難幫助您。現在你說的是「有什麼不對,它是什麼」,沒有其他人知道什麼是「什麼」或什麼是「錯」。你將無法以這種方式獲得任何有用的幫助。

+0

好的建議添加代碼。我確實在每一步之間都會將行打印到服務器上,以查看事件發生的位置,並將代碼與我在帖子中從服務器上看到的代碼相關聯。這足以說明我想要做什麼嗎? – jabbajac

相關問題