2014-09-24 13 views
0

В моем веб-приложении пользователь может подключаться к своим учетным записям YouTube, чтобы они могли получать доступ к своим видеозаписям и взаимодействовать с ними через веб-приложение. Это отлично подходит для одного аккаунта YouTube. Я борюсь с тем, как я могу позволить людям связывать несколько аккаунтов YouTube, не создавая несколько учетных записей на моем сайте.Как управлять несколькими учетными записями Google через oauth2

Поддерживается ли это API Google?

Вот что я пытался сделать (используя Python и Django) ... сократил его, чтобы он был немного более управляемым. В принципе, я не могу заставить Google повторно зайти и попросить новое разрешение ... похоже, просто знает, кто является пользователем и отвечает. Любая помощь в любом направлении ценится.

# models.py 
class YouTubeAccount(models.Model): 
    user = models.ForeignKey(settings.AUTH_USER_MODEL) 
    google_plus_id = models.CharField(max_length=50, editable=False, null=True) 
    display_name = models.CharField(max_length=255, null=True) 

class FlowModel(models.Model): 
    id = models.ForeignKey(YouTubeAccount, primary_key=True) 
    flow = FlowField() 

class CredentialsModel(models.Model): 
    id = models.ForeignKey(YouTubeAccount, primary_key=True) 
    credential = CredentialsField() 

Тогда в представлении для добавления учетных записей:

@login_required 
def add_account(request): 
    yt_acct = YouTubeAccount.objects.create(user=request.user) 
    yt_acct.save() 

    # i thought maybe I use the yt_account as my flow state 
    FLOW.params['state'] = xsrfutil.generate_token(settings.SECRET_KEY, yt_acct) 
    authorize_url = FLOW.step1_get_authorize_url() 
    return HttpResponseRedirect(authorize_url) 

@login_required 
def return_authorization(request): 

    yt_acct = YouTubeAccount.objects.get(user=request.user, google_plus_id__isnull=True, display_name__isnull=True) 

    if not xsrfutil.validate_token(settings.SECRET_KEY, 
            request.REQUEST['state'], 
            yt_acct): 
     return HttpResponseBadRequest() 

    credential = FLOW.step2_exchange(request.REQUEST) 

    http = httplib2.Http() 
    http = credential.authorize(http) 
+0

У меня такой же сценарий в моем приложении. Проблема, с которой я столкнулась, заключается в том, что в коде сервлета обратного вызова я могу определить, какой пользователь (идентифицированный уникальным идентификатором) инициировал эту ссылку google. Я знаю, с каким пользователем я должен был бы связать эту авторизацию учетной записи. Как у вас это получилось? – zee

ответ

1

Да, они будут выбирать, какие счета для использования при проверке подлинности, или же они могут просто присвоить значение по умолчанию. Дополнительная информация: http://apiblog.youtube.com/2013/06/google-page-identities-and-youtube-api.html

Но если вы просите одного пользователя иметь несколько учетных записей Google, вы можете попросить их снова пройти через OAuth. И в каждой операции вы можете использовать только один пользователь OAuth, поэтому для каждой учетной записи все вызовы aPI следует повторять. Вот примеры PHP, использующие клиентскую библиотеку. В них вы можете просто хранить несколько json-файлов и т. Д., Пусть они проходят через OAuth столько, сколько они хотят. https://github.com/youtube/api-samples/tree/master/python

+1

Похоже, если я правильно его читаю, эта * одна учетная запись Google может иметь несколько «каналов» ... эффективно, разные учетные записи YouTube. Таким образом, пользователь должен будет сначала установить это в конце Google ... потому что изначально я спрашивал, как реализовать несколько учетных записей Google? Имеет ли это смысл? Благодаря! – thornomad

+1

обновил мой ответ. –

+0

Спасибо за информацию - я использовал пример python для создания приложения для загрузки моего пользователя. Проблема, с которой я сталкиваюсь, заключается в том, как заставить пользователя повторно обновлять их oauth? Просто удаление хранилища учетных записей не работает - Google повторно инициирует пользователя автоматически. – thornomad