【问题标题】:oAuth2 credentials being stored as unicodeoAuth2 凭据被存储为 unicode
【发布时间】:2017-11-14 21:11:21
【问题描述】:

我正在存储 oauth2 凭据,以便以后创建服务。

目前我的模型如下所示:

from django.db import models
from oauth2client.contrib.django_util.models import CredentialsField
from south.modelsinspector import add_introspection_rules

class oAuth(models.Model):
    siteid = models.CharField(max_length=100L, primary_key=True)
    credential = CredentialsField()

    add_introspection_rules([],["^oauth2client\.contrib\.django_util\.models\.CredentialsField"])

当我尝试保存我的凭据时:

credential = flow.step2_exchange(code)
storage = DjangoORMStorage(oAuth, 'siteid', site_id, 'credential')
storage.put(credential)

在我的数据库中,我存储了一个 unicode 字符串,然后无法使用以下方法将其转换为 oauth 对象:

storage = DjangoORMStorage(oAuth, 'siteid', site_id, 'credential')
credential = storage.get()
return credential

我得到的凭据是以前存储的 unicode,我只是无法对其执行 .authorize 方法,这是我需要做的,

我是不是在什么地方弄糊涂了?

【问题讨论】:

    标签: python django oauth double-click


    【解决方案1】:

    这花了我一段时间才找到(在询问堆栈溢出之前,我已经为此苦苦挣扎了一天左右)但是..

    返回的 unicode 需要使用我通过实际调用并找到 this 重新转换为 oauth 对象

    解决办法:

    storage = DjangoORMStorage(oAuth, 'siteid', site_id, 'credential')
    credential = storage.get()
    credential = CredentialsField().to_python(credentials)
    return credential
    

    credential 现在可以作为常规 oauth 对象调用

    【讨论】:

      【解决方案2】:

      确保您的数据库设置为存储utf-8。 Django 需要它。

      https://docs.djangoproject.com/en/1.11/ref/unicode/#creating-the-database

      【讨论】:

      • 我的问题是,当我调用 storage.get() 时,我得到的不是原始的 oAuth 对象,所以我不能调用 .authorize(),我不确定我是否需要使用 unicode 并构建一个 oAuth 对象,但我找不到任何文档。我检查了编码,它是 cp1252 但是我所有的其他表都是相同的编码,其他一切似乎都工作正常
      • 忽略我之前的评论。我现在看到 DjangoORMStorage 来自 lib 本身。我没主意了。 :-)
      • 查看client storage 似乎存储的 .get() 实际上必须返回一个 oauth 对象,这就是为什么我不明白它是如何返回 unicode 的原因
      猜你喜欢
      • 2013-06-25
      • 1970-01-01
      • 2016-03-04
      • 2019-10-04
      • 2016-11-14
      • 1970-01-01
      • 1970-01-01
      • 2019-11-09
      • 1970-01-01
      相关资源
      最近更新 更多