將google oauth用於項目。有它的工作,但想拉的個人資料圖片顯示在我的應用程序。一旦我能夠顯示圖片,我退出並試圖用oauth重新登錄。現在告訴我,名稱和電子郵件已被採納。我在我的User
模型中使用find_or_create_by
來查找或創建oauth證書。我不知道是什麼造成了這個問題,因爲它剛剛在一段時間內工作。而現在,當我回到我的代碼的第一次,這不是工作期。只要給我BC驗證的錯誤(試圖創建一個記錄,而不是在數據庫中找到記錄。)find_or_create_by未找到,僅嘗試創建
sessions#create
def create
if params[:provider].present?
@user = User.find_or_create_from_auth(request.env['omniauth.auth'])
if @user
session[:user_id] = @user.id
flash[:notice] = "Logged in as #{@user.name}"
redirect_to dashboard_path
end
用戶模型 -
def self.find_or_create_from_auth(auth)
find_or_create_by!(provider: auth.provider, uid: auth.uid, password_digest: 'N/A') do |user|
user.provider = auth.provider
user.uid = auth.uid
user.name = auth.info.name
user.email = auth.info.email
user.address = "123 ABC St"
user.password = 'n/a'
user.oauth_token = auth.credentials.token
user.oauth_expires_at = Time.at(auth.credentials.expires_at)
user.save
end
end
得到任何幫助,只是沒有看到這裏的斷開連接。
如果我拿出模型上的驗證這確實工作。但是,那不是'find_or_create_by'應該做什麼?找到記錄,如果它已經存在,否則創建它? –
find_or_create_by如果找不到與這些屬性相匹配的記錄,然後創建一個新的記錄,那麼在db中找到具有這些屬性的記錄,即 - >()內部的內容。所以你沒有通過電子郵件和名稱,這就是爲什麼find_or_create_by它不在意這 –
這很奇怪,我添加了電子郵件和名稱的論點。當我拿出驗證證書時,它創建了多個記錄。我從參數中刪除了名稱和電子郵件,並重新應用了驗證,現在它可以工作,但現在圖像在視圖中是零,即使它在那裏作爲屬性。大聲笑。感謝您的幫助。肯定會給我更多的玩法:P –