Ruby on rails 设计、完善和';新增会话';
我在我的用户模型中有一个方法(使用designe和confirmable),名为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["
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在find_for_oauth方法中的代码>行,如下所示:
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