2011-06-09 6 views
5

Giriş sayfasından http://tipfy-auth.appspot.com (kaynak http://code.google.com/p/tipfy/source/browse/examples/auth/app/) başarımı başarı ile taklit etmeye çalışıyorum. Kullanıcı sayfaya yeniden yönlendirildiğinde sorunla karşılaşıyorum. > Facebook yönlendirme (FacebookAuthHandler) 302 - -facebook auth problem with tipfy 1.0b

LoginPage (LoginHandler)> Facebook.com -> Facebook yönlendirme (FacebookAuthHandler) 302 -> SignupPage (SignupHandler) 302 -> LoginPage (LoginHandler): Geçerli istek akışı gibi görünüyor.

Buradaki sorun (düşündüğüm kadarıyla) giriş sayfasından tekrar son 302'dir (http-yönlendirme).

Bazı yoğun bir kayıt işleminden sonra (bunu yerel olarak test etmek için bulamıyorsanız), Facebook'tan döndüğünüzde bir oturum ayarlanmış gibi görünüyor. Oturum, self.auth.session (bir dict) ve self.session (bir SecureCookieSession) iki yerde istek işleyicisinde (FacebookAuthHandler) bir dict olarak saklanır, ancak SignupPage'e yönlendirmeden sonra self.auth.session Yoktur.

LoginPage için SignUpPage gelen yönlendirme nedeniyle SignupHandler 'ın olsun yöntemi reuquest burada ele alınmalıdır veya yönlendirilecek olmadığını belirlemek için self.auth.session bakar bir dekoratör @login_required sahip olduğunu oluşur.

Neden self.session, istekleri arasında korunan self.auth.session değil? Her istekte self.auth.session ayarlandı mı? Seanslar nasıl saklanıyor? Eğer db içinde ise, veri deposu tipi maddesi (master/slave veya yüksek replikasyon) yapar.

Kaynak kodu kazıyorum ama işe yaramayan bir şey bulamıyorum.

..fredrik

Yayınlanan cevabı aşağıda

DÜZENLEME.

+0

Lütfen çözümünüzü cevap olarak gönderiniz, bu nedenle cevapsız kalmayacaktır. – cope360

cevap

1

Sorunu SessionAuthStore sınıfının oturum özelliği içinde bulunduğu için daralttım.

seans özelliği erişme o (tipfy.auth.SessionAuthStore olarak) bu kodu çalışır (bu kullanıcıyı yönlendirmek olmadığını belirlemek için bakar @login_required özelliktir) Ne zaman: Burada

if not self.loaded: 
    self._load_session_and_user() 

return self._session 

sorun _load_session_and_user yönteminde, oturumun içindeki 'simge' anahtarını temel alan bir kullanıcının veri deposundan bir kullanıcı yüklemesini beklemesidir.

Ne yazık ki Facebook'tan dönen kullanıcı yok. Bu yüzden başarısız olur ve kullanıcıyı giriş sayfasına yönlendirir.

Projemdeki devam etmek i kodunu biraz, @login_required (tipfy.auth.init.py)

if not auth.session: 
     auth._load_session() # If no session try to load it from the _session_base 

    if not auth.session: 
     return handler.redirect(auth.login_url()) 

Ve MultiAuthStore sınıfına yeni bir yöntem değiştirdi.

def _load_session(self): 
     self.loaded = True 
     session = self._session_base.get('_auth', {}) 
     if session: 
      self._session = session 
Muhtemelen

değil en iyi çözüm ama işe yarıyor.