Я сузил это до того, что проблема заключается в свойстве сеанса класса SessionAuthStore.
При доступе к свойству сеанса (это свойство, которое @login_required просматривает, чтобы определить, перенаправлять ли пользователя или нет) он запускает этот код (в tipfy.auth.SessionAuthStore):
if not self.loaded:
self._load_session_and_user()
return self._session
Проблема здесь в том, что в методе _load_session_and_user ожидается возможность загрузки пользователя из хранилища данных на основе «токена»ключ внутри сеанса.
К сожалению, при возвращении из Facebook нет пользователя.Так что это не удастся и перенаправит пользователя на страницу входа.
Чтобы продолжить работу в своем проекте, я немного изменил код, @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())
И новый метод для класса MultiAuthStore.
def _load_session(self):
self.loaded = True
session = self._session_base.get('_auth', {})
if session:
self._session = session
Возможно, не лучшее решение, но оно работает.