在每个用于社交身份验证的请求之前,为 python-social-auth 设置动态 keys/secret
Set dynamic keys/secret for python-social-auth, before every request used for social auth
我在 django 内部使用:
social-auth-app-django
和 python-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_KEY
和 SOCIAL_AUTH_FACEBOOK_SECRET
动态。为什么我想要这个是因为我的 django 应用程序正在为多个站点提供数据,并且每个站点都有自己的密钥和他自己的域。
我找不到覆盖设置中的变量或将密钥发送到 social_auth 的方法。
要做到这一点,您有两个选择:
定义您自己的策略,根据需要覆盖 get_setting()
和 return 动态值(当前的 request
在 self.request
可用) .
然后用SOCIAL_AUTH_STRATEGY
设置指向它。
扩展 Facebook
后端并覆盖 get_key_and_secret()
和 return 自定义值。当前请求位于 self.strategy.request
.
然后在AUTHENTICATION_BACKENDS
设置中指向它(删除built-int)。
编辑:排版
我在 django 内部使用:
social-auth-app-django
和 python-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_KEY
和 SOCIAL_AUTH_FACEBOOK_SECRET
动态。为什么我想要这个是因为我的 django 应用程序正在为多个站点提供数据,并且每个站点都有自己的密钥和他自己的域。
我找不到覆盖设置中的变量或将密钥发送到 social_auth 的方法。
要做到这一点,您有两个选择:
定义您自己的策略,根据需要覆盖
get_setting()
和 return 动态值(当前的request
在self.request
可用) .然后用
SOCIAL_AUTH_STRATEGY
设置指向它。扩展
Facebook
后端并覆盖get_key_and_secret()
和 return 自定义值。当前请求位于self.strategy.request
.然后在
AUTHENTICATION_BACKENDS
设置中指向它(删除built-int)。
编辑:排版