2012-05-16 5 views
0

reddit API의 login 기능을 추가하고 싶지만 쿠키가 저장되지 않습니다. 다음 코드는 Django의 자체 ModelBackend보다 스택에 설치된 사용자 정의 인증 백엔드에서 호출됩니다.Reddit API로 로그인 할 때 쿠키가 저장되지 않습니다.

response = requests.post(REDDIT_LOGIN_URL, data={'user' : username, 
               'passwd' : password}) 
cookie = SimpleCookie() 
cookie.load(response.headers.get('set-cookie')) 

인쇄 쿠키 [ 'reddit_session는'] (난독)는 음식물의 한 입, 그러나 아무 브라우저에서

<Morsel: reddit_session='5356323%2C2012-05-15T17%3A15%3A08%xxxxxxxxxxxx7a4f25351b003a2484'> 

이 쿠키를 찾지을 반환합니다. 페이지가 다시로드되면 내 reddit 세션이 사라지고이 세션을 다시 작성하지 않으면 다른 reddit API 호출을 사용할 수 없습니다. Chrome 개발자 도구를 사용하여 쿠키를 볼 때 리소스> 쿠키 아래에 항목이 "공백"으로 표시됩니다. 내가 이것을 클릭하면, 내가 할 모든 흰색 페이지 settings.py에서 사용할 수

SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies" 

으로,

내가 장고-1.4에서이 일을하고있다 "이 사이트가 더 쿠키가 없습니다"로한다. 나는 같은 결과없이 시도했다.

여기에 뭔가가 있습니까? narwa도 사용해 보았습니다. 쿠키도 저장되지 않습니다. 동일한 장고 세션이 django_language 및 session_id 쿠키를 저장하므로 내 쿠키가 내 브라우저에서 확실히 활성화됩니다.

모든 포인터 또는 답변은 높이 평가됩니다.

+0

HttpResponse_object.set_cookie 메소드를 사용하여 브라우저에 쿠키를 삭제하지 않는 이유는 무엇입니까? –

+0

문제는 모든 브라우저에서 지속됩니까? –

+0

모든 브라우저에서 일관성이 있습니까? SimpleCookie가 쿠키를 삭제해서는 안됩니까? 인증 백엔드 모듈에서 Reddit 응답을 받고 있기 때문에 사용할 수있는 HttpResponse 개체가 없습니다. –

답변

1

정확히 모르겠지만 API로 놀고있을 때는 modhash 만 저장하고 요청을 보내면됩니다. 또한 requests 모듈을 사용하는 경우 세션 인스턴스를 대신 사용하면 호출간에 쿠키가 저장됩니다. 하지만 어떻게 장고에 놀 수 있을지 모르겠습니다. 로그인을 위해 작성한 코드는 다음과 같습니다.

def login(username, password): 
    """logs into reddit, saves cookie""" 

    print 'begin log in' 
    #username and password 
    UP = {'user': username, 'passwd': password, 'api_type': 'json',} 
    headers = {'user-agent': '/u/STACKOVERFLOW\'s API python bot', } 
    #POST with user/pwd 
    client = requests.session() 

    r = client.post('http://www.reddit.com/api/login', data=UP) 

    #print r.text 
    #print r.cookies 

    #gets and saves the modhash 
    j = json.loads(r.text) #I believe r.json == j at this point 

    client.modhash = j['json']['data']['modhash'] 
    print '{USER}\'s modhash is: {mh}'.format(USER=username, mh=client.modhash) 

    #pp2(j) 

    return client 
관련 문제