2011-07-13 19 views
3

私はASP.NET MVC3(C#)を使用してWebアプリケーションを作成しています。ログインしているユーザーのGoogleアカウントからカレンダーと連絡先を取得する必要があります)。DotNetOpenAuthを使用して、Googleアカウントから連絡先とカレンダーの両方を取得する

私はユーザーの認証情報を保存したくないので、私はOAuthを使用しています(ただし、OpenIDを使用していません - ユーザーは自分のGoogleアカウントを使用してログインさせたくありません)。

私がアクセストークンを取得し、以降のデータを取得するためにそれを使用するには、次のコードを持っている:残念ながら

var google = new WebConsumer(GoogleConsumer.ServiceDescription, this.TokenManager); 

// Is Google calling back with authorization? 
var accessTokenResponse = google.ProcessUserAuthorization(); 
if (accessTokenResponse != null) { 
    this.AccessToken = accessTokenResponse.AccessToken; 
    //SAVE ACCESS TOKEN TO DATABASE 
} else if (this.AccessToken == null) { 
    // If we don't yet have access, immediately request it. 
    GoogleConsumer.RequestAuthorization(google, GoogleConsumer.Applications.Contacts); 
} 

、あなたが見ることができるように、私は唯一のコンタクトの承認を要求し、RequestAuthorizationよメソッドで複数のアプリケーションを設定することはできません。

異なるスコープのいくつかの異なるトークンを必要とせずに、どうすればできますか? (カレンダー用、連絡先用など)

答えて

1

GoogleConsumerクラスはDotNetOpenAuth.ApplicationBlockプロジェクトのソースコードとして提供されています。あなたが必要とするものだけを行うように自由に変更してください。

+0

だから、私はそのクラスを変更する必要があります..今..どのように私のセットアップは、複数のスコープのGoogleの権限を許可する? –

1

スコープは、文字列内に配置し、スペースで分離することができ

EDIT:ポスターのコメントを追加しましたから

私はスコープstring作成次のコードを使用し

foreach (String s in Scopes) { 
    sb.Append(String.Format("{0}", s)); 
} 
scope = sb.ToString().Trim(); 

Scopesは、使用したいスコープを含むarrayStringsString[])です。 Googleからの承認をリクエストすると、ログイン画面に要求されているサービスの一覧が表示されます。

+0

これは、いくつかのサンプルコードを提供した場合、そしておそらくそれがなぜポスターの質問に関連するのかについてのより深い説明であれば、より有益な答えとなるでしょう。スコープ列 \t \t \t \t foreachの(文字列のスコープ内) \t \t \t \t { \t \t \t \t \t sb.Append(String.Formatの( "{0}" を作成するとき –

+1

私は次のコードを使用し、 s)); \t \t \t \t} \t \t \t \t範囲= sb.ToString()(TRIM)。 ここで、Scopesは、使用したいスコープを含む文字列の配列です。 Googleからの承認をリクエストすると、ログイン画面にリクエストされているサービスのリストが表示されます。 –