Google日历 - 管理多个用户日历

时间:2014-11-20 04:46:27

标签: vb.net calendar google-api google-calendar-api google-oauth

我的.NET系统中有一个模块,用于管理多个用户的Google日历,这些模块基于他们几天前已经过折旧的V2 API编写。

我的问题是,如何访问和管理多个用户日历?与V2 API一样,我们只需传入UserID和Password即可访问资源。但是在V3中,使用了OAuth2。我设法一次为一个用户进行身份验证。如何在此之后访问其他用户日历? (例如:logut user1并再次使用user2登录?)。到目前为止,我找不到任何相关的例子。

Sub Main()
    Dim secret As New ClientSecrets
    secret.ClientId = "MyClientID.apps.googleusercontent.com"
    secret.ClientSecret = "MyClientSecret"

    Dim init As New Flows.AuthorizationCodeFlow.Initializer("https://accounts.google.com/o/oauth2/auth", "https://accounts.google.com/o/oauth2/token")
    init.ClientSecrets = secret

    Dim flow As New Flows.AuthorizationCodeFlow(init)
    Dim token As Responses.TokenResponse = flow.LoadTokenAsync("user1@gmail.com", CancellationToken.None).Result
    Dim credential As New UserCredential(flow, "user1@gmail.com", token)

    Try
        credential = GoogleWebAuthorizationBroker.AuthorizeAsync(secret, {CalendarService.Scope.Calendar}, "user", CancellationToken.None, New FileDataStore("CAS.GoogleConnector")).Result
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try

    ' Create the calendar service using an initializer instance
    Dim initializer As New BaseClientService.Initializer()
    initializer.HttpClientInitializer = credential
    initializer.ApplicationName = "Clinic Assist"
    Dim service As CalendarService
    service = New CalendarService(initializer)
    Dim a As CalendarsResource.GetRequest = service.Calendars.Get("user1@gmail.com")
    a.Execute()
    Console.WriteLine("Press any key to continue...")
    Dim key As ConsoleKeyInfo = Console.ReadKey
    If key.Key = ConsoleKey.N Then
        NewEvent(service)
    ElseIf key.Key = ConsoleKey.D Then
        DeleteEvent(service)
    ElseIf key.Key = ConsoleKey.C Then
        NewCalendar(service)
    End If
End Sub

Private Sub NewEvent(service As CalendarService)

    Dim startDateTime, endDateTime As New Data.EventDateTime
    startDateTime.DateTime = "2014-12-01T16:00:00"
    endDateTime.DateTime = "2014-12-01T17:00:00"

    Dim eventData As New Data.Event
    With eventData
        .Start = startDateTime
        .End = endDateTime
        .Location = "ALocation"
        .Summary = "TRY"
    End With
    Try
        Dim insertRequest As InsertRequest = service.Events.Insert(eventData, "user1@gmail.com")
        insertRequest.Execute()
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

我尝试从" user1@gmail.com"更改userId;到" user2@gmail.com"它似乎也访问了user1日历。感谢是否有人可以帮助解决这个问题。

1 个答案:

答案 0 :(得分:0)

如果所有用户都在单个域中,您可以使用Service Accounts。服务帐户属于您的应用程序,而不是单个最终用户。您的应用程序代表服务帐户调用Google API,因此用户不会直接参与。

如果用户不在同一个域中,则需要为应用程序中的每个用户存储凭据。这是帮助您的link