Ruby on rails 设计、完善和';新增会话';

Ruby on rails 设计、完善和';新增会话';,ruby-on-rails,authentication,devise,omniauth,Ruby On Rails,Authentication,Devise,Omniauth,我在我的用户模型中有一个方法(使用designe和confirmable),名为new\u with\u session,这是Omniauth+designe()所要求的: 用户可以使用Google或Facebook登录,我使用这一行来保存正确的用户。电子邮件: if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["raw_info"] || session["

我在我的用户模型中有一个方法(使用designe和confirmable),名为
new\u with\u session
,这是Omniauth+designe()所要求的:

用户可以使用Google或Facebook登录,我使用这一行来保存正确的
用户。电子邮件

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
    更好的方法吗
  • 如果我想从Google/Facebook保存更多的数据,比如用户名,我是否应该将其添加到我的自定义
    new\u with_session
    ?若然,原因为何
    您是否希望通过Facebook或Gmail验证系统中的现有帐户,使用电子邮件地址作为标识符,并使用该电子邮件地址创建一个帐户(如果该电子邮件地址不存在)?如果是这样,我认为您不需要在会话中使用
    new\u
    ;您可以使用引用的链接中所述的模型方法:

    def self.find_for_facebook_oauth(access_token, signed_in_resource=nil)
      data = access_token.extra.raw_info
      if user = User.where(:email => data.email).first
        user
      else # Create a user with a stub password. 
        User.create!(:email => data.email, :password => Devise.friendly_token[0,20]) 
      end
    end
    
    您可以创建类似的
    self.find\u for\u google\u oauth
    方法,并在
    Users::OmniAuthCallbackController
    中创建相应的google方法

    如果您想使用Facebook或Google回调中的其他数据,在创建用户时,只需将其添加到
    user.create行,如下所示:

    User.create!(:email => data.email, 
      :first_name => data.first_name, 
      :last_name => data.last_name, 
      :password => Devise.friendly_token[0,20])
    

    这对我来说很好,我不需要使用
    new\u with\u session
    做任何事情。不过,我仍在学习Desive和OmniAuth,所以如果这种方法有什么问题,我很乐意听听。

    build\u资源中使用了new\u with\u会话。这与可注册(用户注册表单)一起使用

    只有当您的Facebook/Omniauth会话已经存在,并且您希望使用Omniauth的一些数据预先填充注册表时,此选项才有用。(假设您尚未在回调时自动创建帐户)


    我也在做同样的事情,但因为它是关于新课程的,我想知道它是否有必要,这就是我需要的知识。
    User.create!(:email => data.email, 
      :first_name => data.first_name, 
      :last_name => data.last_name, 
      :password => Devise.friendly_token[0,20])
    
    # 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