Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby on Rails omniauth和carrierwave_Ruby On Rails_Carrierwave_Omniauth_Omniauth Facebook - Fatal编程技术网

Ruby on rails Ruby on Rails omniauth和carrierwave

Ruby on rails Ruby on Rails omniauth和carrierwave,ruby-on-rails,carrierwave,omniauth,omniauth-facebook,Ruby On Rails,Carrierwave,Omniauth,Omniauth Facebook,我在ruby on rails应用程序中使用omniauth(omniauth facebook)。我想知道我是否可以检索用户的城市、国家和性别信息。我如何与carrierwave拍摄用户资料照片 谢谢。使用(Carrierwave文档)[作为我的参考,您需要修改您的用户模型以添加新字段以支持Carrierwave gem功能 这通常意味着: class User < ActiveRecord::Base mount_uploader :avatar, AvatarUploader e

我在ruby on rails应用程序中使用omniauth(omniauth facebook)。我想知道我是否可以检索用户的城市、国家和性别信息。我如何与carrierwave拍摄用户资料照片

谢谢。

使用(Carrierwave文档)[作为我的参考,您需要修改您的用户模型以添加新字段以支持Carrierwave gem功能

这通常意味着:

class User < ActiveRecord::Base
  mount_uploader :avatar, AvatarUploader
end
您可以从控制台将其设置为使用

File.open('somewhere') do |f|
  u.avatar = f
end
最后,在测试后,您会将其添加到视图中的表单字段中。您的用户通常有一个CRUD,因此在视图中的“创建/更新表单”中,您可以修改这些表单以包含一个文件表单(这是HTML而不是rails,因此您可以在搜索中使用HTML查找更多信息),添加后,您将需要修改相应的控制器以将该值列入白名单,以便使用这些控制器操作保存该值


该过程类似于在初始生成用户模型后向用户对象添加其他字段。

通常,omniauth将返回一个仅与身份验证有关的标准答案,基本上是一个哈希值,其中包含电子邮件、
名称/第一个/最后一个
配置文件\u图片url
username
,等等。一些提供商给你发电子邮件,其他提供商不发,如果你通过作用域专门要求,其他提供商只提供一些字段

对于facebook,我在omniauth.rb上使用了以下内容(在config/initializers/*中)

这意味着facebook将在oauth成功授权后,在响应哈希(omniauth负责安排)上向我提供一封电子邮件,一些基本信息,如ID、名字和姓氏。它提供的令牌也将用于管理页面,尽管我最初不要求任何与之相关的字段

因此,在您的情况下,您会要求
城市
国家
以及
信息字段
中的任何内容(通过他们的图形浏览器仔细检查这些字段是否不需要任何额外的范围)

在您通过omniauth(这基本上是一段作为中间件编写的代码,它为您执行oauth2流程-您也可以自己完成)获得响应后,您将拥有一个概要文件PICURL。 你会想下载那张照片。 使用carrierwave,您可以在控制器或模块/类上通过实例化上载程序设置所在的列,然后执行方法来完成此操作。download!将url从下载位置传递给它:

user.avatar = AvatarUploader.new
user.avatar.download! omniauth_hash['blabla_fields']['blabla_picture_url']
这将下载一个远程图片url,并将其保存为常规carrierwave附件,然后您可以通过您的模型正常访问该附件

provider :facebook, ENV['FB_ID'], ENV['FB_SECRET'], scope: 'public_profile, email, manage_pages, user_friends', info_fields: 'id, first_name, last_name, link, email', image_size: 'large'
user.avatar = AvatarUploader.new
user.avatar.download! omniauth_hash['blabla_fields']['blabla_picture_url']