2017-01-05 32 views
0

我试图从Omniauth获取用户地址,但没有工作。Rails Facebook Omniauth获取用户地址

我在登录后在更新回调中添加了他们的地址。

如果我从omniauth中删除了他们的地址,那么应用程序没有更新他们的地址。

有人有任何想法如何获得他们的地址,以及为什么应用程序没有编辑和更新他们的地址后登录?

感谢的

def omniauth_callback 
    auth_hash = request.env['omniauth.auth'] 



    user = User.find_by_uid(auth_hash[:uid]) 
    if user.nil? && auth_hash[:info][:email] 
     user = User.find_by_email(auth_hash[:info][:email]) 
    end 

    if user.nil? 
     email_domain = '' 
     email_domain = '@facebook.com' if auth_hash[:provider] == 'facebook' 
     user = User.new(email: auth_hash[:info][:email] || auth_hash[:info][:nickname] + email_domain, name: auth_hash[:info][:first_name] || '', surname: auth_hash[:info][:last_name] || '', gender: 'I') 

     user.password_digest = '' 
     user.save!(validate: false) 
    end 

    user.update_attribute(:login_at, Time.zone.now) 
    user.update_attribute(:address) 
    user.update_attribute(:neighborhood) 
    user.update_attribute(:postal_code) 
    user.update_attribute(:ip_address, request.remote_ip) 
    user.update_attribute(:provider, auth_hash[:provider]) 
    user.update_attribute(:uid, auth_hash[:uid]) 
    user.update_attribute(:oauth_token, auth_hash[:credentials][:token]) 
    user.update_attribute(:oauth_expires_at, Time.at(auth_hash[:credentials][:expires_at])) 

    cookies[:auth_token] = { value: user.oauth_token, expires: user.oauth_expires_at} 
    redirect_to root_url 
    end 
+0

[Ruby on Rails Omniauth脸书不会返回电子邮件]可能的重复(http://stackoverflow.com/questions/31954540/ruby-on-rails-omniauth-facebook-doesnt-return-email) – OneNeptune

+0

@OneNeptune ,没有。因为不是地址 – jjplack

+0

Facebook是不是提供电子邮件的问题,或者您的代码没有保存提供的电子邮件? – mysmallidea

回答

0

一个原因你的代码将无法正常工作,因为这

user.update_attribute(:address) 

不会做任何事情 - 除了引发错误。 You have to pass a value into update_attribute as well as specify the field

同样@mysmallidea指出,你最好建议use update,因为这将允许你更新一个数据库操作中的多个字段。

如果存在,地址数据将在auth_hash之内。所以我建议你先制定出这个散列的结构。在你的开发环境,添加以下内容:

Rails.logger.info auth_hash.inspect 

将输出电流auth_hash到日志/ development.log。用它来确定地址数据在散列中的位置。然后,您可以执行如下操作:

user.update address: auth_hash[:info][:address] 

但是,您可能会发现该地址未包含在由facebook oauth系统返回的数据中。在这种情况下,您需要返回documentation以查看是否有可能。

相关问题