在我的应用程序中,我正在使用谷歌日历API。 我为我的帐户以及少数用户创建了客户端ID和客户端密码。 当我运行应用程序时,如果我没有登录到浏览器,它会要求我登录我的Gmail帐户。一旦我登录到我的Gmail帐户,我就可以在我的日历上成功获取/创建/更新/删除事件。
目前我使用我的日历ID登录到gmail帐户,我能够获取不同日历ID的事件,但是我无法通过其他用户日历ID创建/更新/删除事件。
我的要求是,我登录到我的gmail id,请说abc@gmail.com,我可以获取日历ID xyz@gmail.com的事件,但无法创建/更新/删除日历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,
});
希望你了解我的要求。等待最早的回应。 谢谢。
答案 0 :(得分:1)
您需要记住,身份验证是针对每个用户的。当您运行GoogleWebAuthorizationBroker.AuthorizeAsync并保存" user"使用abc@google.com登录,您可以访问abc@googles.com' s日历。
当您使用GoogleWebAuthorizationBroker.AuthorizeAsync再次登录并保存" User2"使用xyz@google.com即可访问xyz@google.com' s日历。
您应该做的是让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();