Facebook建议使用Facebook登录名时,首先应要求用户提供尽可能少的权限,尤其要避免在用户需要通过您的网站发布内容之前请求发布权限-https: //developers.facebook.com/docs/ facebook-login / permissions /#optimizing。
我们一直在尝试使用python-social-auth的django应用程序实现此功能,但似乎无法在网站的不同位置请求不同的权限-范围是通过SOCIAL_AUTH_FACEBOOK_SCOPE
设置设置的,因此无法提出要求以后再使用其他范围(例如,publish_actions
从中排除SOCIAL_AUTH_FACEBOOK_SCOPE
,然后在用户尝试从您的网站发布到Facebook时要求用户提供该权限)。
有谁知道这在python-social-auth应用中是否可行,如果可以,怎么办?
(以下文本摘自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
data(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
在其中使用即可。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句