Структура пирамиды¶
Pyramid многоразовые приложения сложны (или я недостаточно способный). Вот подробная информация о том, как включить это приложение в Pyramid.
Зависимости¶
Pyramid app зависит от sqlalchemy, поддержки других ORM пока нет, но запросы на поддержку приветствуются.
Включение приложения¶
Приложение может быть просканировано Configurator.scan()
, также оно определяет includeme()
в файле __init__.py
, который добавит необходимые маршруты в конфигурацию вашего приложения. Для сканирования просто добавьте:
config.include('social_pyramid')
config.scan('social_pyramid')
Настройка моделей¶
В настоящее время модели для python-social-auth определяются внутри функции, поскольку им нужна ссылка на текущий экземпляр БД и модель User, используемую в вашем проекте (см. Ссылка на модель User ниже). Как только конфигурация приложения Pyramid и база данных определены, вызовите init_social
для регистрации моделей:
from social_pyramid.models import init_social
init_social(config, Base, DBSession)
Пока я не смог найти другой способ определить модели другим способом, а не делать это как побочный эффект вызова этой функции, поскольку база данных недоступна, а current_app
не может быть использована во время инициализации, только во время выполнения.
Ссылка на модель пользователя¶
Приложение хранит ссылку на модель пользователя, используемую вашим проектом, определите ее с помощью этого параметра:
SOCIAL_AUTH_USER_MODEL = 'foobar.models.User'
Значением должен быть путь импорта к модели User.
Глобальный пользователь¶
Приложение ожидает, что текущий вошедший пользователь доступен по адресу request.user
, пример приложения гарантирует это с помощью этого передатчика:
def get_user(request):
user_id = request.session.get('user_id')
if user_id:
user = DBSession.query(User)\
.filter(User.id == user_id)\
.first()
else:
user = None
return user
Обработчик добавляется в конфигурацию, выполняя:
config.add_request_method('example.auth.get_user', 'user', reify=True)
Это всего лишь простой пример, возможно, ваш проект делает это лучше.
Вход пользователя в систему¶
Поскольку приложение не делает никаких предположений о том, как вы собираетесь вводить пользователей в систему, вам необходимо указать это. Для этого определите следующие параметры:
SOCIAL_AUTH_LOGIN_FUNCTION = 'example.auth.login_user'
SOCIAL_AUTH_LOGGEDIN_FUNCTION = 'example.auth.login_required'
Первый должен принять используемую стратегию и экземпляр пользователя, который был создан или получен из базы данных, там вы можете установить id пользователя в сессии или cookies или в другом месте, используемом позже, чтобы получить id снова и загрузить пользователя из базы данных (проверьте фрагмент выше в Global User).
Вторая используется для того, чтобы убедиться, что при вызове представления disconnect пользователь вошел в систему. Она должна принимать экземпляр User
и возвращать True
или Flase
.
Проверьте файл auth.py в примере приложения для получения подробной информации о том, как это делается.
Социальный аутентификатор в контексте шаблонов¶
Чтобы получить доступ к социальным экземплярам, связанным с пользователем в контексте шаблона, вы можете сделать это, обратившись к атрибуту
social_auth
в экземпляре пользователя:Также вы можете добавить бэкенды (связанные и не связанные с пользователем), включив эту контекстную функцию в вашем проекте:
В результате загрузится диктант с записями:
Ключ
associated
будет иметь все связанныеUserSocialAuth
экземпляры, относящиеся к данному пользователю. Ключnot_associated
будет содержать не связанные имена бэкендов, а ключ backends будет содержать все включенные имена бэкендов.