Rails获取oauth令牌和额外字段

时间:2015-12-24 04:52:45

标签: ruby-on-rails omniauth

我正在尝试获取oauth令牌但无法执行此操作。我正在使用omniauth登录使用facebook.I我能够登录但我想获取功能,如用户的个人资料数据。这就是为什么我想要获取令牌这里是我的代码
[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


[application_controller]

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


[session_controller]

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


1 个答案:

答案 0 :(得分:0)

您应该在初始化程序中添加所需的参数。有关详细信息,请参阅文档中的scope

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