2013-02-15 97 views
4

我在我的應用程序中使用Devise Invitable,並且允許用戶使用Facebook登錄OmniauthFacebook登錄設計邀請

我唯一遇到的問題是,當用戶選擇使用「邀請接受」頁面中的鏈接使用Facebook登錄時,它們被重定向到新用戶註冊頁面,並且已經填寫了一些詳細信息。問題在於,由於Devise Invitable在發送邀請時會創建新用戶,因此用戶無法使用邀請發送時提供的電子郵件進行登錄。

Omniauth Callbacks Controller

def all 
    user = User.from_omniauth(request.env["omniauth.auth"]) 
    if user.persisted? 
    flash.notice = "Signed in!" 
    sign_in_and_redirect user 
    else 
    session["devise.user_attributes"] = user.attributes 
    redirect_to new_user_registration_url 
    end 
end 
alias_method :facebook, :all 

回答

0

你已確診的問題,這是你必須像一個User但不是真的。您必須檢測是否屬於這種情況,並使用您從Facebook收集的數據更新您的記錄。

if user.persisted? 
    flash.notice = "Signed in!" 
    sign_in_and_redirect user 
elsif user.previously_invited? 
    invited_user = User.where(email: user.email).first 
    invited_user.attributes = user.attributes 
    invited_user.save 
    sign_in_and_redirect invited_user 
else 
    session["devise.user_attributes"] = user.attributes 
    redirect_to new_user_registration_url 
end 

User#previously_invited?就留給讀者做練習,但它會包含在電子郵件where查找與一些色器件,invitable包括在查詢中保持字段。

這不太可能是一個完整的解決方案,因爲設計可以維護許多字段,可能需要在此操作後調整invited_user。無論您是否認識到邀請已滿足,都取決於您。你可能會發現這個理由足以轉移到不同於邀請設計的邀請的不同機制。