Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.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 Rails获取oauth令牌和额外字段_Ruby On Rails_Omniauth - Fatal编程技术网

Ruby on rails Rails获取oauth令牌和额外字段

Ruby on rails Rails获取oauth令牌和额外字段,ruby-on-rails,omniauth,Ruby On Rails,Omniauth,我正在尝试获取oauth令牌,但无法获取。我正在使用omniauth使用facebook登录。我可以登录,但我想获取用户的个人资料数据等功能。因此,我想获取令牌。这是我的代码 [omniauth.rb] OmniAuth.config.logger = Rails.logger Rails.application.config.middleware.use OmniAuth::Builder do provider :facebook, 'my-app-key', 'my-app-id',

我正在尝试获取oauth令牌,但无法获取。我正在使用omniauth使用facebook登录。我可以登录,但我想获取用户的个人资料数据等功能。因此,我想获取令牌。这是我的代码
[omniauth.rb]

OmniAuth.config.logger = Rails.logger

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook, 'my-app-key', 'my-app-id', {:client_options => {:ssl => {:ca_file => Rails.root.join("cacert.pem").to_s}}}
end 

[user.rb]

class User < ActiveRecord::Base
  def self.from_omniauth(auth)
  where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
    user.provider = auth.provider 
    user.uid      = auth.uid
    user.name     = auth.info.name
    user
    user.save
  end
end


end
class用户

[应用程序\控制器]

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception


  helper_method :current_user

  def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id]
  end

end
class ApplicationController

[会话控制器]

class SessionsController < ApplicationController
  def create

    user = User.from_omniauth(env["omniauth.auth"])
    session[:user_id] = user.id
    redirect_to root_path
  end

  def destroy
    session[:user_id] = nil
    redirect_to root_path
  end
end
class sessioncontroller


您应该在初始值设定项中添加所需的参数。有关更多详细信息,请参见文档中的

config/initializers/omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook,ENV["FACEBOOK_APP_ID"], ENV["FACEBOOK_SECRET_ID"],
           {:scope => 'email, public_profile, user_friends',
            :secure_image_url => true}
end

您应该在初始值设定项中添加所需的参数。有关更多详细信息,请参见文档中的

config/initializers/omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook,ENV["FACEBOOK_APP_ID"], ENV["FACEBOOK_SECRET_ID"],
           {:scope => 'email, public_profile, user_friends',
            :secure_image_url => true}
end

我是否需要删除以下行提供程序:facebook、“我的应用程序密钥”、“我的应用程序id”、{:client\u options=>{:ssl=>{:ca\u file=>Rails.root.join(“cacert.pem”)。不,可以用上述代码替换。但是,您确实需要使用
app\u id
secret\u id
替换环境变量,您可以保存任何您喜欢的内容。您可以通过在
user.provider=auth.provider
的正上方放置一个调试器来查看响应。我是否需要删除以下行提供程序:facebook、'my app key'、'my app id'、{:client_options=>{:ssl=>{:ca_file=>Rails.root.join(“cacert.pem”)。对于}否,您可以用上述代码替换。但是,您确实需要使用
app\u id
secret\u id
替换环境变量,您可以保存任何您喜欢的内容。您可以通过将调试器放在
user.provider=auth.provider