Аутентификация календаря Google в серверной стороне Blazor - PullRequest
0 голосов
/ 28 мая 2020

студент-программист здесь зацикливается на процессе аутентификации Google. Попытка создать веб-приложение календаря с использованием аутентификации Google / Google Calendar API. Кажется, что начальный знак работает нормально, так как мое имя отображается в моем элементе управления входом, но я застрял в части авторизации календаря. После 16 часов изучения руководств вот что я придумал ...

 public class CalHandler
    {
        private UserCredential Credential { get; set; }       
        private ClaimsPrincipal User { get; set; }
        private CalendarService Service { get; set; }

        public void setUser(ClaimsPrincipal user)
        {
            User = user;
        }


        public void Authorize()
        {
            string[] Scopes = { CalendarService.Scope.Calendar, CalendarService.Scope.CalendarEvents };
            string ApplicationName = "CalendarApp";

            using (var stream = new System.IO.FileStream("appsettings.json", System.IO.FileMode.Open, 
                System.IO.FileAccess.Read))
            {          
                CancellationTokenSource cts = new CancellationTokenSource();
                cts.CancelAfter(TimeSpan.FromSeconds(20));
                CancellationToken ct = cts.Token;

                Credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    Scopes,
                    "user",
                    ct).Result;
                Service = new CalendarService(new Google.Apis.Services.BaseClientService.Initializer()
                {
                    HttpClientInitializer = Credential,
                    ApplicationName = ApplicationName
                });
            }
        }

        public List<Event> GetEvents(int year, int month, int dim)
        {
            try {
                Authorize();

                EventsResource.ListRequest request = Service.Events.List("primary");
                request.TimeMin = new DateTime(year, month, 1);
                request.TimeMax = new DateTime(year, month, dim);
                request.SingleEvents = true;
                request.MaxResults = 30;
                request.OrderBy = EventsResource.ListRequest.OrderByEnum.StartTime;
                List<Event> events = request.Execute().Items.ToList();

                return events;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return null;
            }
        }

Все работает нормально, когда я запускаю его в Visual Studio, но ломается, как только я публикую sh в Azure. GetEvents () всегда возвращает null, и в моем календаре ничего не отображается. Я думаю, это может иметь какое-то отношение к хранилищу, но я мало работал с аутентификацией, поэтому не могу быть уверен? Любые советы или подсказки по работе с этим были бы замечательными!

...