gpt4 book ai didi

ruby-on-rails - 设计、Omniauth 和 'new with session'

转载 作者:行者123 更新时间:2023-12-01 08:36:19 25 4
gpt4 key购买 nike

根据 Omniauth + Devise (https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview) 的要求,我的用户模型(使用设计和可确认)中有一个名为 new_with_session 的方法:

def self.new_with_session(params, session)
super.tap do |user|
if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["raw_info"] || session["devise.google_data"] && session["devise.google_data"]["extra"]["raw_info"]
user.email = data["email"]
end
end
end

允许用户使用 Google 或 Facebook 登录,我正在使用此行保存正确的 user.email:

if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["raw_info"] || session["devise.google_data"] && session["devise.google_data"]["extra"]["raw_info"]

但我认为这不是正确的方法,所以...

  1. 您知道构建 user.email 比使用 || 运算符更好的方法吗?
  2. 如果我想从 Google/Facebook 保存更多数据,例如用户名,我应该将其添加到我的自定义 new_with_session 中吗?如果是这样,为什么?

最佳答案

new_with_session 用于 build_resource。这与可注册的(用户注册表格)一起使用。

这仅在您的 Facebook/Omniauth session 已经存在并且您希望使用来自 omniauth 的一些数据预先填写您的注册表单时有用。 (假设您尚未在回调时自动创建帐户)

# Build a devise resource passing in the session. Useful to move
# temporary session data to the newly created user.
def build_resource(hash=nil)
hash ||= params[resource_name] || {}
self.resource = resource_class.new_with_session(hash, session)
end

关于ruby-on-rails - 设计、Omniauth 和 'new with session',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10015743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com