2011-05-15 2 views

答えて

2

OmniauthはOAuthとOAuth2の両方をサポートしています。これはとなります。はGoogleアカウントの認証を可能にします。 2つのGoogleのOAuthの宝石ここhttps://github.com/intridea/omniauth/wiki/List-of-Strategies

は次のとおりです:

あたりとして

ここでは、omniauth経由で使用できる戦略のすべてをしています最初の宝石の文書:

はコンフィグでのRailsアプリにミドルウェアを追加//omniauth.rb初期化子:

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :google, CONSUMER_KEY, CONSUMER_SECRET 
    # plus any other strategies you would like to support 
end 

これはメインomniauth gemの設定に加えでを行われています。

+0

私は、認証だけでなく、access_tokenを取得することについての問題だと思います。このaccess_tokenはgoogle apisを使用すると便利です。 – robermorales

+0

ああ、私はそれを読んだOPは、彼らは自分自身をロールバックする必要があるかどうか疑問に思っていたので、彼らはグーグル経由でオムニバスとの認証をすることができないと感じた。 OmniauthはGoogle経由の認証を拡張していますが、それは基本的な実装よりも前の段階です。 – jstim

1

GoogleのOAuth1プロトコルは廃止され、多くの宝石はまだOAuth2プロトコルを使用するように更新されていないため、OAuth2とGmailで既存の宝石を使用していました。私はついにそれをNet::IMAPを使用して動作させることができました。

ここでは、OAuth2プロトコルを使用してGoogleから電子メールを取得する実例を示します。この例では、mail,gmail_xoauthomniauth、およびomniauth-google-oauth2の宝石を使用しています。

APIトークンを取得するには、Google's API consoleにアプリを登録する必要があります。

# in an initializer: 
ENV['GOOGLE_KEY'] = 'yourkey' 
ENV['GOOGLE_SECRET'] = 'yoursecret' 
Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :google_oauth2, ENV['GOOGLE_KEY'], ENV['GOOGLE_SECRET'], { 
    scope: 'https://mail.google.com/,https://www.googleapis.com/auth/userinfo.email' 
    } 

end 

# ...after handling login with OmniAuth... 

# in your script 
email = auth_hash[:info][:email] 
access_token = auth_hash[:credentials][:token] 

imap = Net::IMAP.new('imap.gmail.com', 993, usessl = true, certs = nil, verify = false) 
imap.authenticate('XOAUTH2', email, access_token) 
imap.select('INBOX') 
imap.search(['ALL']).each do |message_id| 

    msg = imap.fetch(message_id,'RFC822')[0].attr['RFC822'] 
    mail = Mail.read_from_string msg 

    puts mail.subject 
    puts mail.text_part.body.to_s 
    puts mail.html_part.body.to_s 

end