如何在不同时间向 facebook 请求不同的权限?

2023-12-04

Facebook 建议,在使用 Facebook 登录时,您应该首先向用户请求尽可能少的权限,特别是避免请求发布权限,直到用户需要通过您的网站发布某些内容 -https://developers.facebook.com/docs/facebook-login/permissions/#optimizing.

我们一直在尝试使用 python-social-auth 的 django 应用程序来实现这一点,但似乎无法在网站的不同点请求不同的权限 - 范围是通过SOCIAL_AUTH_FACEBOOK_SCOPE设置,并且以后不可能要求不同的范围(例如排除publish_actions from 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() 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.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在不同时间向 facebook 请求不同的权限? 的相关文章

随机推荐