(以下文本摘自文档:http://psa.matiasaguirre.net/docs/use_cases.html#multiple-scopes-per-provider)
目前 python-social-auth 没有提供为单个后端定义多个范围的方法,这通常是需要的,因为建议向用户询问可能的最小范围,并在真正需要时增加访问权限。可以添加一个新的后端来扩展原始后端来完成该行为,有两种方法可以实现。
覆盖get_scope()
method
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
or POST
data (self.data
).
将这个新后端放在项目中的某个位置并替换原来的后端FacebookOAuth2
in AUTHENTICATION_BACKENDS
有了这个新版本。
定义一个后端来处理范围
可以通过定义从原始后端扩展但覆盖名称的第二个后端来执行相同的操作,这将意味着新的 URL 以及新后端的新设置(因为该名称用于构建设置名称),这也意味着提供程序中的一个新应用程序,因为并非所有提供程序都提供定义多个重定向 URL 的选项。为此,只需添加一个后端,例如:
from social.backends.facebook import FacebookOAuth2
class CustomFacebookOAuth2(FacebookOauth2):
name = 'facebook-custom'
将这个新后端放在项目中的某个位置,保留原始后端FacebookOAuth2
in 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
in it.