(以下文本摘自http://psa.matiasaguirre.net/docs/use_cases.html#multiple-scopes-per-provider的文档)
目前 python-social-auth 没有提供为单个后端定义多个范围的方法,这通常是需要的,因为建议向用户询问可能的最小范围并在真正需要时增加访问权限。可以添加一个扩展原始后端的新后端来完成该行为,有两种方法可以做到这一点。
覆盖get_scope()
方法
from social.backends.facebook import FacebookOAuth2
class CustomFacebookOAuth2(FacebookOauth2):
def get_scope(self):
scope = super(CustomFacebookOAuth2, self).get_scope()
if self.data.get('extrascope'):
scope += [('foo', 'bar')]
return scope
这个方法非常简单,它覆盖了在后端()中返回作用域值的方法,并在或数据()get_scope()
中的参数指示的情况下将额外的值添加到列表中。GET
POST
self.data
将这个新后端放在项目中的某个位置,并用这个新版本替换原来FacebookOAuth2
的后端。AUTHENTICATION_BACKENDS
定义一个后端来处理范围
可以通过定义从原始后端扩展但覆盖名称的第二个后端来做同样的事情,这将意味着新的 URL 和新后端的新设置(因为名称用于构建设置名称),这也意味着提供程序中的新应用程序,因为并非所有提供程序都为您提供定义多个重定向 URL 的选项。为此,只需添加一个后端,例如:
from social.backends.facebook import FacebookOAuth2
class CustomFacebookOAuth2(FacebookOauth2):
name = 'facebook-custom'
将此新后端放在项目中的某个位置,将原始后端保存FacebookOAuth2
在AUTHENTICATION_BACKENDS
. 现在一组新的 URL 将起作用:
/login/facebook-custom
/complete/facebook-custom
/disconnect/facebook-custom
还有一组新设置:
SOCIAL_AUTH_FACEBOOK_CUSTOM_KEY = '...'
SOCIAL_AUTH_FACEBOOK_CUSTOM_SECRET = '...'
SOCIAL_AUTH_FACEBOOK_CUSTOM_SCOPE = [...]
当需要额外的权限时,只需将用户重定向到/login/facebook-custom
然后获取此新后端的社交身份验证条目user.social_auth.get(provider='facebook-custom')
并access_token
在其中使用。