【问题标题】:Rails 3 getting gmail contacts using omniauth?Rails 3使用omniauth获取gmail联系人?
【发布时间】:2011-04-13 08:41:55
【问题描述】:

我使用omniauth 使用google 凭据成功登录了吗? omn​​iauth 提供 uid 如下链接

https://www.google.com/accounts/o8/id?id=xxxxxxxxxx

通过使用上面的链接可以获得gmail联系人或他们任何其他方式获得gmail联系人

【问题讨论】:

    标签: ruby-on-rails gmail omniauth


    【解决方案1】:

    不,Omniauth 只提供身份验证。

    您可能会感兴趣的宝石:https://github.com/cardmagic/contacts

    引用:“Contacts 是一个通用界面,用于从包括 Hotmail、AOL、Gmail、Plaxo 和 Yahoo 在内的各种提供商那里获取联系人列表信息。”

    编辑:也看看这篇博文:http://rtdptech.com/2010/12/importing-gmail-contacts-list-to-rails-application/

    【讨论】:

      【解决方案2】:

      here 获取您的 client_id 和 client_secret。这是一个粗略的脚本,效果很好。根据您的需要对其进行修改。

          require 'net/http'
          require 'net/https'
          require 'uri'
          require 'rexml/document'
      
          class ImportController < ApplicationController
      
            def authenticate
              @title = "Google Authetication"
      
              client_id = "xxxxxxxxxxxxxx.apps.googleusercontent.com"
              google_root_url = "https://accounts.google.com/o/oauth2/auth?state=profile&redirect_uri="+googleauth_url+"&response_type=code&client_id="+client_id.to_s+"&approval_prompt=force&scope=https://www.google.com/m8/feeds/"
              redirect_to google_root_url
            end
      
            def authorise
              begin
                @title = "Google Authetication"
                token = params[:code]
                client_id = "xxxxxxxxxxxxxx.apps.googleusercontent.com"
                client_secret = "xxxxxxxxxxxxxx"
                uri = URI('https://accounts.google.com/o/oauth2/token')
                http = Net::HTTP.new(uri.host, uri.port)
                http.use_ssl = true
                http.verify_mode = OpenSSL::SSL::VERIFY_NONE
                request = Net::HTTP::Post.new(uri.request_uri)
      
                request.set_form_data('code' => token, 'client_id' => client_id, 'client_secret' => client_secret, 'redirect_uri' => googleauth_url, 'grant_type' => 'authorization_code')
                request.content_type = 'application/x-www-form-urlencoded'
                response = http.request(request)
                response.code
                access_keys = ActiveSupport::JSON.decode(response.body)
      
                uri = URI.parse("https://www.google.com/m8/feeds/contacts/default/full?oauth_token="+access_keys['access_token'].to_s+"&max-results=50000&alt=json")
      
                http = Net::HTTP.new(uri.host, uri.port)
                http.use_ssl = true
                http.verify_mode = OpenSSL::SSL::VERIFY_NONE
                request = Net::HTTP::Get.new(uri.request_uri)
                response = http.request(request)
                contacts = ActiveSupport::JSON.decode(response.body)
                contacts['feed']['entry'].each_with_index do |contact,index|
      
                   name = contact['title']['$t']
                   contact['gd$email'].to_a.each do |email|
                    email_address = email['address']
                    Invite.create(:full_name => name, :email => email_address, :invite_source => "Gmail", :user_id => current_user.id)  # for testing i m pushing it into database..
                  end
      
                end  
              rescue Exception => ex
                 ex.message
              end
              redirect_to root_path , :notice => "Invite or follow your Google contacts."
      
      
            end
      
          end
      

      设置屏幕截图。

      【讨论】:

      • MultiJson::LoadError (795: ' 错误 401(客户端错误)
      猜你喜欢
      • 2016-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      • 2023-04-10
      • 1970-01-01
      相关资源
      最近更新 更多