我是Rails的新手。
所以...在我的Rails应用程序中,我有OmniAuth Facebook集成,我想在我的数据库中添加一些字段,例如名字,姓氏和位置。
我遵循了这个wiki,我有一个简单的登录,但没有额外的字段(名字,姓氏,位置)。
所以,我在 config / initializers / devise.rb中添加了这个:
require 'omniauth-facebook'
config.omniauth :facebook, '123456...', '123456...',
scope: 'first_name, last_name, location',
stategy_class: OmniAuth::Strategies::Facebook
所以,如果我是正确的,上面会要求这些额外的字段。
现在,在我的模型user.rb中,我想添加3行,它会将请求的值传递给数据库。
def self.find_for_facebook_omniauth(omniauth, signed_in_resource=nil)
basic = {
provider: omniauth.provider,
uid: omniauth.uid,
}
User.where(basic).first || User.create(basic.merge(
firstname: omniauth.info.firstname, # these are the
lastname: omniauth.info.lastname, # lines I'm not
location: omniauth.info.location, # sure of
email: omniauth.info.email,
password: Devise.friendly_token[0,20],
))
end
答案 0 :(得分:1)
假设您的omniauth
为request.env["omniauth.auth"]
,那么您可能会发现.info
哈希中未包含其他字段。
在这种情况下,使用.extra.raw_info
会更安全,user_hometown
将包含其他范围的字段。
我在这里请求了额外的范围info
,我们可以看到>> auth.info
=> #<OmniAuth::AuthHash::InfoHash email="dukedave@gmail.com" first_name="Dave" image="http://graph.facebook.com/508528599/picture?type=square" last_name="Tapley" name="Dave Tapley" nickname="dave.tapley" urls=#<OmniAuth::AuthHash Facebook="https://www.facebook.com/dave.tapley"> verified=true>
哈希中缺少它:
extra.raw_info
但出现在gender
(>> auth.extra.raw_info
=> #<OmniAuth::AuthHash email="dukedave@gmail.com" first_name="Dave" gender="male" hometown=#<OmniAuth::AuthHash id="105540216147364" name="Phoenix, Arizona"> id="508528599" last_name="Tapley" link="https://www.facebook.com/dave.tapley" locale="en_US" name="Dave Tapley" timezone=-7 updated_time="2013-11-22T22:10:26+0000" username="dave.tapley" verified=true>
之后):
{{1}}