我在我的应用程序上使用Devise Invitable,并使用Omniauth
允许用户登录Facebook。
我唯一遇到的问题是,当用户选择使用邀请接受页面中的链接登录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
您已经诊断出问题,即您有类似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
查询,查询中包含一些设计邀请维护字段。
这不太可能是一个完整的解决方案,因为在该操作之后,designinvitable维护了许多可能需要在invited_user
上进行调整的字段。你是否认为邀请已经完成取决于你自己。你可能会发现这个原因足以转移到一个不同的邀请机制,而不是设计可邀请的。