Получить все события пользователя

В настоящее время я могу войти в систему и сохранить свой токен обновления (если нужно, я также могу сохранить токен доступа) в базе данных с помощью Google OAuth2 при использовании python social auth.

models.py:

from django.db import models
from django.contrib.auth.models import AbstractUser

class Profile(AbstractUser):

    refresh_token = models.CharField(max_length=255, default="")

У меня есть url /calendar, который должен получить события календаря Google текущего зарегистрированного пользователя. У меня также есть обычный логин, который, если у пользователя есть токен refresh, означает, что он связал свой аккаунт google со своей учетной записью. Как мне использовать get_events, чтобы просто получить все события, связанные с этой учетной записью.

from googleapiclient.discovery import build

def get_events(request):
    print(request.user.refresh_token)
    credentials = AccessTokenCredentials(get_access_token(request), scopes=SCOPES)
    service = build('calendar', 'v3', credentials=credentials)
    google_calendar_events = service.events().list(calendarId='primary', singleEvents=True,
                                          orderBy='startTime').execute()
    google_calendar_events = google_calendar_events.get('items', [])
    return google_calendar_events 

def get_access_token(request): 
    social = request.user.social_auth.get(provider='google-oauth2') 
    return social.extra_data['access_token']

views.py

def login(request):
    if request.method == 'POST':
        form = AuthenticationForm(request.POST)
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        if user:
            if user.is_active:
                auth_login(request, user)
                return redirect('home')
            else:
                messages.error(request,'User blocked')
                return redirect('login')
        else:
            messages.error(request,'username or password not correct')
            return redirect('login')
    else:
        form = AuthenticationForm()
    return render(request, 'registration/login.html',{'form':form})

Из вашего следующего ответа,

Скорее всего, это credentials = Credentials(get_access_token(request), scopes=SCOPES)

request.user_refresh_token также является значением токена обновления.

.

У меня также есть файл credentials.json, который содержит token_uri, client_id и client_secret, если это правильно, который использовался для входа.

Ваш вопрос заключается в том, чтобы получить маркер доступа, используя маркер обновления. В этом случае, чтобы получить маркер доступа, как насчет следующего примера сценария?

Образец сценария:

Если client_id, client_secret, refresh_token и token_uri помещены в переменную, можно использовать следующий сценарий.

from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials

credentials = Credentials(
    token=None,
    client_id="###", # Please set the cliend ID.
    client_secret="###", # Please set client secret.
    refresh_token='###', # Please set refresh token.
    token_uri="###" # Please set token URI.
)
credentials.refresh(Request())
access_token = credentials.token
print(access_token)

# If you want to use the following script, you can use it.
# service = build('calendar', 'v3', credentials=credentials)

Или, если client_id, client_secret, refresh_token и token_uri помещены в файл, вы можете использовать следующий сценарий.

tokenFile = '###' # Please set the filename with the path.
credentials = Credentials.from_authorized_user_file(tokenFile) # or, Credentials.from_authorized_user_file(tokenFile, scopes)
credentials.refresh(Request())
access_token = credentials.token
print(access_token)

# If you want to use the following script, you can use it.
# service = build('calendar', 'v3', credentials=credentials)

Ссылка:

Вернуться на верх