在每个用于社交身份验证的请求之前,为 python-social-auth 设置动态 keys/secret

Set dynamic keys/secret for python-social-auth, before every request used for social auth

我在 django 内部使用: social-auth-app-djangopython-social-auth[django]。 在 settings.py 中,我声明了以下变量:

SOCIAL_AUTH_FACEBOOK_KEY = ''
SOCIAL_AUTH_FACEBOOK_SECRET = ''
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = {'fields': 'name, email'}

一切正常。但是我想在每个社交身份验证请求之前在中间件或装饰器中设置 SOCIAL_AUTH_FACEBOOK_KEYSOCIAL_AUTH_FACEBOOK_SECRET 动态。为什么我想要这个是因为我的 django 应用程序正在为多个站点提供数据,并且每个站点都有自己的密钥和他自己的域。

我找不到覆盖设置中的变量或将密钥发送到 social_auth 的方法。

要做到这一点,您有两个选择:

  1. 定义您自己的策略,根据需要覆盖 get_setting() 和 return 动态值(当前的 requestself.request 可用) .

    然后用SOCIAL_AUTH_STRATEGY设置指向它。

  2. 扩展 Facebook 后端并覆盖 get_key_and_secret() 和 return 自定义值。当前请求位于 self.strategy.request.

    然后在AUTHENTICATION_BACKENDS设置中指向它(删除built-int)。

编辑:排版