2011-08-07 14 views
5

Python Webアプリケーションでは、OAuthとIMAPを使用してGmailに接続できます。 OAuthは現在ログインしているGoogleアカウントを使用して、ウェブアプリへのアクセスを許可するよう求めています。ただし、アカウントの電子メールアドレスを実際に取得するAPIは提供していません。Oauthを使用してGmailで認証した後にメールアドレスを取得する方法はありますか?

問題はGmailのとインターフェースするために、ユーザー補助金は、OAuthを使用してアクセスにもかかわらず、である、あなたはまだ明示的にあなたのIMAP接続URLに電子メールアドレスを提供する必要があります。

https://mail.google.com/mail/b/[your-email]/imap/ 

このため、ウェブアプリケーションはユーザーにメールアドレスを要求して、OAuthでGmailからのアクセスを許可するように求めます。悪いのは、彼らが入力した電子メールアドレスが、アクセスを許可したアカウントの電子メールと一致しない可能性があり、アプリケーションが失敗することです。

OAuthを使用してメールアドレスを取得する方法はありますか?そのURLをユーザーに問い合せなくてもそのURLに入れることができますか?私はthis answerを見てみましたが、https://mail.google.com/https://www.googleapis.com/auth/userinfo#emailの両方を自分のスコープとして使用すると、GoogleはBad Requestを返します。

答えて

4

あなたの後ろはGoogle Contacts APIです。あなたがOAuthを経由して許可している場合、あなたはおそらく現在、Gmailのスコープにアクセスする許可を求めている:

https://mail.google.com/mail/feed/atom 

ます。また、連絡先のスコープのための許可を求める必要があります:

https://www.google.com/m8/feeds/ 

あなたたらあなたは次のようなGETリクエストを作ることができる、ということがあります。

https://www.google.com/m8/feeds/contacts/default/full?max-results=1 

これはここで、XMLの束を返す必要がありますいくつかの関連ビットがされています

<?xml version="1.0" encoding="UTF-8"?> 
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:gContact="http://schemas.google.com/contact/2008" xmlns:batch="http://schemas.google.com/gdata/batch" xmlns:gd="http://schemas.google.com/g/2005" gd:etag="W/&quot;CEcMRX0_eCp7ImA9WhdRF00.&quot;"> 
<id>[email protected]</id> 
... 
<author> 
    <name>Joe Bloggs</name> 
    <email>[email protected]</email> 
</author> 
... 
</feed> 

ご覧のとおり、許可ユーザーのメールは数か所で確認できます。

OAuthを使用している場合は、Google OAuthプレイグラウンドをご覧になりたい場合は、http://googlecodesamples.com/oauth_playground/index.phpと非常に便利です。 OAuth2を使用することに決めたら、同等のツールがありますhttps://code.google.com/oauthplayground

+1

完全に働きました。また、遊び場はとてもいいですね、それを含めてくれてありがとう! – Joe

+1

この回答に追加するには、私も 'max-results = 0'を使って試してみました。そのようにしてXMLを少なくしても、 ''にアクセスできます。 – Joe

関連する問題