2011-04-06 4 views
0

페이스 북 로그인 옵션이있는 django 앱을 만들었습니다. 그것을하기 위해 나는이 링크를 따라 가고 있었다. django-facebook connect with ajax. 나는 링크로 말한대로 모든 일을했고 페이스 북 연결로 로그인 한 사용자를 얻게되었습니다. 그러나 사용자가 'registrationForm'(FB 로그인 버튼이 주어진 페이지)에서 로그인하면 아웃 페이지가 팝업되어 사용자 이름과 비밀번호를 입력합니다. 사용자에게 로그인 할 때 페이지에 리디렉션하지 않고 동일한 registrationForm이 다시 나타납니다. FB 로그인이 성공한 후에 누군가가 콜백 URL을 설정할 수 있도록 도와 줄 수 있습니까? FB 연결을 위해 나는 위의 사이트에서 주어진 것과 같은 코드를 사용하고있다.django 앱에서 페이 스북 로그인을위한 url을 다시 설정하십시오.

facebookconnect.py settings.py

LOGIN_REDIRECT_URL = '/forgotPassword/' 

HTML 로그인 부분

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) 

views.py

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') 

[registrationForm]

<p>Login via facebook!</p> 

{% load facebookconnect %} 
{% facebook_connect_login_button %} 

{% facebook_connect_script %} 

답변

-1

나는 그것을 얻었습니다. 콜백 URL은 Facebook 앱 설정에서 설정됩니다.