我有一个用django 1.7,python 3.4构建的网站。我想让我的用户邀请他们的Gmail联系人访问我的网站(比如linkedin和许多其他网站)。我正在使用Oauth2.0并且能够获得访问其联系人的权限。但我不知道如何继续以及采取什么措施。
有人可以帮助我概述我需要采取的所有步骤,以及如何做到这一点的一些解释。
即使是指向合适职位的链接也会有所帮助。
答案 0 :(得分:2)
请参阅,当您需要在网站中实现这些功能时,您必须了解API等以充分利用它。
完成此https://developers.google.com/google-apps/contacts/v3/?csw=1#audience
我们只讨论谷歌。其他提供程序也可以使用类似的步骤进行管理。在这里你使用django-allauth来完成这项任务。
所涉及的基本步骤是:
使用提供商创建和配置您的应用。为此你需要谷歌(或Facebook等)的开发者档案。您将不得不在谷歌开发者控制台中创建一个应用程序,你会在互联网上找到大量的教程。这已由您完成,因为您已在您的网站上激活谷歌注册。那是Oauth2.0的服务器端
现在您需要定义所需的授权范围。您可能只需要访问权限即可查看公共个人资料。这可能包括名字,姓氏,电子邮件,身份证,性别等。对于您的应用,您需要用户的联系人,为此您还必须将其包含在范围内。 这只在settings.py中完成。
'google':{'SCOPE':['个人资料','电子邮件','https://www.googleapis.com/auth/contacts'], 'AUTH_PARAMS':{'access_type':'online'}} }
现在,您可以访问联系人了。现在,您只需要在数据所有者(用户)的同意下提取联系人。
为此,您可以按照答案中的第一个链接进行操作。你需要做的是你必须向某个网址发送一个获取请求('https://www.google.com/m8/feeds/contacts/default/full'+'?access_token ='+ access_token)。该请求仅向提供商(谷歌)提供其为该特定用户提供的授权令牌。您将在db表socialtoken中找到。一旦发送了正确的请求,您将获得的响应是xml格式的用户联系人。
获得后,您可以轻松解析它以提取所需信息。
如果您了解流程,事情就很简单。 django-allauth只能帮助你注册和放弃登录,您可以通过定义范围获得不同的权限。
要提取联系人,您可以编写自己的代码。
一个简单的例子是:
def get_email_google(request):
# social = request.user.social_auth.get(provider='google-oauth2')
user =request.user
# Code dependent upon django-allauth. Will change if we shift to another module
# if request.user.userprofile.get_provider() != "google":
a = SocialAccount.objects.get(user=user)
b = SocialToken.objects.get(account=a)
# access = b.token
access_token = b.token
url = 'https://www.google.com/m8/feeds/contacts/default/full' + '?access_token=' + access_token + '&max-results=100'
req = urllib2.Request(url, headers={'User-Agent' : "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.30 (KHTML, like Gecko) Ubuntu/11.04 Chromium/12.0.742.112 Chrome/12.0.742.112 Safari/534.30"})
contacts = urllib2.urlopen(req).read()
contacts_xml = etree.fromstring(contacts)
# print
# return render(request, 'search/random_text_print.html', locals())
result = []
for entry in contacts_xml.findall('{http://www.w3.org/2005/Atom}entry'):
for address in entry.findall('{http://schemas.google.com/g/2005}email'):
email = address.attrib.get('address')
result.append(email)
return render(request, 'search/random_text_print.html', locals())
答案 1 :(得分:0)
user =request.user
a = SocialAccount.objects.get(user=user)
b = SocialToken.objects.get(account=a)
# access = b.token
access_token = b.token
SCOPES = ['SCOPE_URL']
creds = client.AccessTokenCredentials(access_token, 'USER_AGENT')
service = build('calendar', 'v3', credentials=creds)