【问题标题】:Using DotNetOpenAuth to get both Contacts & Calendars from a Google account together使用 DotNetOpenAuth 从 Google 帐户同时获取联系人和日历
【发布时间】:2011-07-13 15:54:06
【问题描述】:

我正在使用 ASP.NET MVC3 (C#) 编写一个 Web 应用程序,我需要从我登录用户的 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 方法不允许我设置多个应用程序。

如何在不需要针对不同范围的多个不同令牌的情况下做到这一点? (一个用于日历,一个用于联系人等)

【问题讨论】:

    标签: asp.net-mvc c#-4.0 dotnetopenauth


    【解决方案1】:

    GoogleConsumer 类在DotNetOpenAuth.ApplicationBlock 项目中作为源代码提供给您。请随时对其进行修改以完成您需要的工作。

    【讨论】:

    • 好的,所以我需要修改那个类..现在..我如何在 google uri 授权中设置多个范围?
    【解决方案2】:

    作用域可以放在字符串中,并用空格分隔

    编辑:从海报的 cmets 添加

    我在创建作用域string时使用以下代码:

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

    其中ScopesStrings (String[]) 的array,其中包含我要使用的范围。当您向 Google 请求授权时,您会在登录屏幕上看到所请求的服务列表。

    【讨论】:

    • 如果您提供了一些示例代码,这将是一个更有帮助的答案,也许可以更深入地解释为什么它与发帖人的问题有关。
    • 我在创建作用域字符串时使用以下代码 foreach ( String s in Scopes) { sb.Append(String.Format("{0} ",s)); } 范围 = sb.ToString().Trim();其中 Scopes 是包含我要使用的范围的字符串数组。当您向 Google 请求授权时,您将在登录屏幕中看到所请求的服务列表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 2013-12-27
    相关资源
    最近更新 更多