【问题标题】:redirect_uri error in oauth for facebook django appfacebook django应用程序的oauth中的redirect_uri错误
【发布时间】:2012-10-11 09:40:14
【问题描述】:

我在从 Facebook 获取我正在尝试编写的 Django 应用程序的访问令牌时遇到问题。我的视图设置如下。

from django.http import HttpResponse, HttpResponseRedirect
from django.template import Context, loader
import urllib, json, sys

APP_ID = 'DDDDDDDDDDDDDDD'
APP_SECRET = 'SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS'
MY_URL = 'http://pckandap.com'

def fbauth(request):
    template = loader.get_template('fbauth.html')

    code = request.GET.get('code')
    if code is None:
        redirect_url = 'https://www.facebook.com/dialog/oauth?client_id='+APP_ID+'&redirect_uri='+MY_URL+'&state=pk1&scope=user_likes'
        return HttpResponseRedirect(redirect_url)
    else:
        access_token = urllib.urlopen('https://graph.facebook.com/oauth/access_token?client_id='+APP_ID+'&redirect_uri='+MY_URL+'&client_secret='+APP_SECRET+'&code='+code)
        context = Context({
            'code_url' : 'https://www.facebook.com/dialog/oauth?client_id='+APP_ID+'&redirect_uri=http://test.com'+'&state=pk1&scope=user_likes',
            'token_url' : 'https://graph.facebook.com/oauth/access_token?client_id='+APP_ID+'&redirect_uri='+MY_URL+'&client_secret='+APP_SECRET+'&code='+code,
            'access_token' : access_token.read()
        })
    return HttpResponse(template.render(context))

在转储这三个变量的模板中,我得到以下信息:
code_urlhttps://www.facebook.com/dialog/oauth?client_id=258585004264349&redirect_uri=http://pckandap.com&state=pk1&scope=user_likes
token_urlhttps://graph.facebook.com/oauth/access_token?client_id=258585004264349&redirect_uri=http://pckandap.com&client_secret=0916bad6925f0df7719218bef87b9576&code=AQDiSPeG4wGLSPKLxy2P1gPWv6se46PN_-CPbUeB3ruZKmvPM7enVHc7yiiLe6goFZwG7quOokNGLY6ktOi32VX0SB5lqjbe-kvT_hxhwIYV3VkJklOpFysSWAWrCnOu5w0pYVIC5GAIpOE7QUVzq3GMf-u6W096zn_4h7X9ODjHo1qGdxUTf9KxCpDXJLzRib2YtZfpR2-RZj0tmAXoN139
access_token : {"error":{"message":"验证验证码出错。请确保您的 redirect_uri 与您在 OAuth 对话请求中使用的相同","type":"OAuthException" "代码":100}}

【问题讨论】:

标签: django facebook oauth


【解决方案1】:

您是否可以使用现有模块 (django-social-auth) 进行 Facebook 登录?

如果没有,我将首先更改您的 if 循环的逻辑,因为它无法打开。改变它:

code = request.GET.get('code', None)

if code is not None:
    access_token = urllib.urlopen...
else:
    redirect_url = ...

在你的context['code_url'] 中有redirect_uri=http://test.com,应该用不同的东西替换吗?

【讨论】:

    【解决方案2】:

    发现redirect_uri 需要一个斜杠。以下现在有效。

    from django.http import HttpResponse, HttpResponseRedirect
    from django.template import Context, loader
    import urllib, json, sys, cgi
    
    APP_ID = 'DDDDDDDDDDDDDDD'
    APP_SECRET = 'SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS'
    MY_URL = 'http://pckandap.com/'
    
    def fbauth(request):
        code = request.GET.get('code')
        if code is None:
            args = dict(client_id=APP_ID, redirect_uri=MY_URL, scope="user_likes,friends_likes")
            redirect_url = "https://graph.facebook.com/oauth/authorize?" + urllib.urlencode(args)
            return HttpResponseRedirect(redirect_url)
        else:
            args = dict(client_id=APP_ID, redirect_uri=MY_URL)
            args["client_secret"] = APP_SECRET  
            args["code"] = code
            token_url = "https://graph.facebook.com/oauth/access_token?"+urllib.urlencode(args)
            request.session['access_token'] = urllib.urlopen(token_url).read()[13:-1]
            return HttpResponseRedirect('/dash/likes')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-14
      • 2016-09-19
      • 2012-04-28
      • 1970-01-01
      • 2015-06-20
      • 2016-07-11
      • 2012-06-10
      • 2011-04-12
      相关资源
      最近更新 更多