Python 在django应用程序中设置facebook登录的回拨url
我创建了一个django应用程序,它也有一个facebook登录选项。为了做到这一点,我遵循了这个链接。我做了链接上所说的一切,我正在让用户登录facebook connect。但是,当用户从“registrationForm”(FB登录按钮)页面登录后,会弹出outh页面,输入用户名和密码。当给它时,用户已登录,但相同的注册表单再次出现,而不重定向页面。在FB登录成功后,有人能帮我设置一个回调url吗。对于FB connect,我使用的代码与上述站点中给出的代码相同 facebookconnect.pyPython 在django应用程序中设置facebook登录的回拨url,python,django,facebook,facebook-graph-api,Python,Django,Facebook,Facebook Graph Api,我创建了一个django应用程序,它也有一个facebook登录选项。为了做到这一点,我遵循了这个链接。我做了链接上所说的一切,我正在让用户登录facebook connect。但是,当用户从“registrationForm”(FB登录按钮)页面登录后,会弹出outh页面,输入用户名和密码。当给它时,用户已登录,但相同的注册表单再次出现,而不重定向页面。在FB登录成功后,有人能帮我设置一个回调url吗。对于FB connect,我使用的代码与上述站点中给出的代码相同 facebookconne
class FacebookScriptNode(template.Node):
def render(self, context):
return """
<script src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php" type="text/javascript"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript"> FB.init("%s", "%s");
function facebook_onlogin() {
var uid = FB.Facebook.apiClient.get_session().uid;
var session_key = FB.Facebook.apiClient.get_session().session_key;
var expires = FB.Facebook.apiClient.get_session().expires;
var secret = FB.Facebook.apiClient.get_session().secret;
var sig = FB.Facebook.apiClient.get_session().sig;
fb_connect_ajax(expires, session_key, secret, uid, sig);
}
function fb_connect_ajax(expires, session_key, ss, user, sig) {
var post_string = 'expires=' + expires;
post_string = post_string + '&session_key=' + session_key;
post_string = post_string + '&ss=' + ss;
post_string = post_string + '&user=' + user;
post_string = post_string + '&sig=' + sig;
$.ajax({
type: "POST",
url: "%s",
data: post_string,
success: function(msg) {
window.location = '%s'; //.reload()
}
});
}
</script>
""" % (settings.FACEBOOK_API_KEY, reverse('xd_receiver'), reverse('facebook_connect_ajax'), settings.LOGIN_REDIRECT_URL)
def facebook_connect_script(parser, token): return FacebookScriptNode()
register.tag(facebook_connect_script)
class FacebookLoginNode(template.Node):
def render(self, context):
return "<fb:login-button onlogin='facebook_onlogin();'></fb:login-button>"
def facebook_connect_login_button(parser, token): return FacebookLoginNode()
register.tag(facebook_connect_login_button)
def login_facebook_connect(request):
status = 'unknown failure'
try:
expires = request.POST['expires']
ss = request.POST['ss']
session_key = request.POST['session_key']
user = request.POST['user']
sig = request.POST['sig']
pre_hash_string = "expires=%ssession_key=%sss=%suser=%s%s" % (
expires,
session_key,
ss,
user,
settings.FACEBOOK_APPLICATION_SECRET,
)
post_hash_string = hashlib.new('md5')
post_hash_string.update(pre_hash_string)
if post_hash_string.hexdigest() == sig:
try:
fb = FacebookUser.objects.get(facebook_id=user)
status = "logged in existing user"
except FacebookUser.DoesNotExist:
contrib_user = User()
contrib_user.save()
contrib_user.username = u"fbuser_%s" % contrib_user.id
fb = FacebookUser()
fb.facebook_id = user
fb.contrib_user = contrib_user
temp = hashlib.new('sha1')
temp.update(str(datetime.datetime.now()))
password = temp.hexdigest()
contrib_user.set_password(password)
fb.contrib_password = password
fb.save()
contrib_user.save()
status = "created new user"
authenticated_user = auth.authenticate(
username=fb.contrib_user.username,
password=fb.contrib_password)
auth.login(request, authenticated_user)
else:
status = 'wrong hash sig'
logging.debug("FBConnect: user %s with exit status %s" % (user, status))
except Exception, e:
logging.debug("Exception thrown in the FBConnect ajax call: %s" % e)
return HttpResponse("%s" % status)
def xd_receiver(request):
return render_to_response('xd_receiver.html')
在settings.py中
LOGIN_REDIRECT_URL = '/forgotPassword/'
html登录部分[registrationForm]
<p>Login via facebook!</p>
{% load facebookconnect %}
{% facebook_connect_login_button %}
{% facebook_connect_script %}
通过facebook登录
{%load facebookconnect%}
{%facebook\连接\登录\按钮%}
{%facebook\u连接\u脚本%}
我让它工作了..回拨url是在facebook应用程序设置中设置的