4

我在我的应用程序上使用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
4

1 回答 1

0

您已经诊断出问题,即您有类似 aUser但不是真的。您必须检测是否是这种情况,并使用您从 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对电子邮件的查找,其中包含查询中包含的一些设计邀请维护字段。

这不太可能是一个完整的解决方案,因为 devise-invitable 维护了许多invited_user在此操作后可能需要调整的字段。您是否将邀请视为已完成取决于您。您可能会发现这个原因足以转移到除设计邀请之外的其他邀请机制。

于 2015-10-23T19:19:57.513 回答