.net google 日历 api : 任何人都可以 create/update/delete 事件
.net google calendar api : anybody can create/update/delete events
在我的应用程序中,我使用 google 日历 api。
我已经为我的帐户以及少数用户创建了客户端 ID 和客户端密码。
当我 运行 应用程序时,如果我没有登录到浏览器,它会要求我登录到我的 gmail 帐户。一旦我登录到我的 gmail 帐户,我就可以在我的日历上成功 get/create/update/delete 事件。
目前我使用我的日历 ID 登录到 gmail 帐户,我能够获取不同日历 ID 的事件,但我无法 create/update/delete 另一个用户日历 ID 的事件。
我的要求是,我登录到我的 gmail id 让我们说 abc@gmail.com 并且我能够获取日历 id xyz@gmail.com 的事件但不能 create/update/delete 日历 ID xyz@gmail.com
的事件
我在互联网上做了很多研究,但没有找到任何东西。据我所知,我们需要将授权 + 访问令牌传递给请求。我也试过了,但没有用。
请建议我应该怎么做才能达到这个要求。
calID = Convert.ToString(Session["CalenderId"]);
userSecret = Convert.ToString(Session["UserSecret"]);
if (!string.IsNullOrEmpty(calID) && !string.IsNullOrEmpty(userSecret))
{
using (var stream =
new FileStream(userSecret, FileMode.Open, FileAccess.Read))
{
string credPath = System.Environment.GetFolderPath(
System.Environment.SpecialFolder.Personal);
credPath = Path.Combine(credPath, ".credentials/calendar-dotnet-quickstart.json/" + calID);
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
// Response.Write("Credential file saved to: " + credPath);
}
// Create Google Calendar API service.
var service = new CalendarService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
希望您理解我的要求。等待最早的回应。
谢谢。
您需要记住,身份验证是基于每个用户的。当您 运行 GoogleWebAuthorizationBroker.AuthorizeAsync 并保存 "user" 使用 abc@google.com 登录时,您可以访问 abc@googles.com 的日历。
当您使用 GoogleWebAuthorizationBroker.AuthorizeAsync 再次登录并使用 xyz@google.com 保存 "User2" 时,您可以访问 xyz@google.com 的日历。
您应该做的是让 xyz@google.com 与 abc@google.com 共享他们的日历,然后他们将有权更新它。
未经测试的示例代码:
AclRule body;
body.Role = "writer";
body.Scope.Type = "user";
body.Scope.Value = "abc@gmail.com";
service.Acl.Insert(body, calendarId).Execute();
在我的应用程序中,我使用 google 日历 api。 我已经为我的帐户以及少数用户创建了客户端 ID 和客户端密码。 当我 运行 应用程序时,如果我没有登录到浏览器,它会要求我登录到我的 gmail 帐户。一旦我登录到我的 gmail 帐户,我就可以在我的日历上成功 get/create/update/delete 事件。
目前我使用我的日历 ID 登录到 gmail 帐户,我能够获取不同日历 ID 的事件,但我无法 create/update/delete 另一个用户日历 ID 的事件。
我的要求是,我登录到我的 gmail id 让我们说 abc@gmail.com 并且我能够获取日历 id xyz@gmail.com 的事件但不能 create/update/delete 日历 ID xyz@gmail.com
的事件我在互联网上做了很多研究,但没有找到任何东西。据我所知,我们需要将授权 + 访问令牌传递给请求。我也试过了,但没有用。
请建议我应该怎么做才能达到这个要求。
calID = Convert.ToString(Session["CalenderId"]);
userSecret = Convert.ToString(Session["UserSecret"]);
if (!string.IsNullOrEmpty(calID) && !string.IsNullOrEmpty(userSecret))
{
using (var stream =
new FileStream(userSecret, FileMode.Open, FileAccess.Read))
{
string credPath = System.Environment.GetFolderPath(
System.Environment.SpecialFolder.Personal);
credPath = Path.Combine(credPath, ".credentials/calendar-dotnet-quickstart.json/" + calID);
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
// Response.Write("Credential file saved to: " + credPath);
}
// Create Google Calendar API service.
var service = new CalendarService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
希望您理解我的要求。等待最早的回应。 谢谢。
您需要记住,身份验证是基于每个用户的。当您 运行 GoogleWebAuthorizationBroker.AuthorizeAsync 并保存 "user" 使用 abc@google.com 登录时,您可以访问 abc@googles.com 的日历。
当您使用 GoogleWebAuthorizationBroker.AuthorizeAsync 再次登录并使用 xyz@google.com 保存 "User2" 时,您可以访问 xyz@google.com 的日历。
您应该做的是让 xyz@google.com 与 abc@google.com 共享他们的日历,然后他们将有权更新它。
未经测试的示例代码:
AclRule body;
body.Role = "writer";
body.Scope.Type = "user";
body.Scope.Value = "abc@gmail.com";
service.Acl.Insert(body, calendarId).Execute();