在facebook django应用程序的oauth中的redirect_uri错误 [英] redirect_uri error in oauth for facebook django app
问题描述
我正在从Facebook获取一个访问令牌的问题,我正在尝试写一个Django应用程序。我有一个视图设置如下。
I am having a problem getting an access token from Facebook for a Django app I am trying to write. I have a view set up as follows.
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_url : https://www.facebook.com/ dialog / oauth?client_id = 258585004264349& redirect_uri = http://pckandap.com& state = pk1& scope = user_likes
token_url : https://graph.facebook.com/的OAuth / CLIENT_ID的access_token = 258585004264349&安培; REDIRECT_URI = HTTP://pckandap.com& client_secret = 0916bad6925f0df7719218bef87b9576&安培;代码= AQDiSPeG4wGLSPKLxy2P1gPWv6se46PN_-CPbUeB3ruZKmvPM7enVHc7yiiLe6goFZwG7quOokNGLY6ktOi32VX0SB5lqjbe-kvT_hxhwIYV3VkJklOpFysSWAWrCnOu5w0pYVIC5GAIpOE7QUVzq3GMf-u6W096zn_4h7X9ODjHo1qGdxUTf9KxCpDXJLzRib2YtZfpR2-RZj0tmAXoN139 结果,
的的access_token :{error:{message:验证验证码错误。请确保您的redirect_uri与您在OAuth对话框请求中使用的一致,type:OAuthException,code:100}}
In my template which dumps those three variables I get the following:
code_url : https://www.facebook.com/dialog/oauth?client_id=258585004264349&redirect_uri=http://pckandap.com&state=pk1&scope=user_likes
token_url : https://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":"Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request","type":"OAuthException","code":100}}
推荐答案
找到redirect_uri需要一个尾部斜线,现在可以使用。
Found out the redirect_uri needs a trailing slash. The following now works.
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')
这篇关于在facebook django应用程序的oauth中的redirect_uri错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!