如何在不同时间向 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 请求不同的权限? 的相关文章

  • 带有 ManyToMany 和直通表的 Graphene-django

    我的应用程序有多个多对多关系具有贯穿模型像这样 class Person models Model name models CharField class Group models Model name models CharField m
  • 是否可以更改 Facebook Connect 网站的范围?

    我正在构建一个 Facebook 应用程序 通过 Oauth 2 0 登录 Facebook 将来当我们添加功能时是否可以向用户请求更多权限 范围 或者我们是否需要预先请求所有权限 有人用 Facebook Connect 实现过这个吗 根
  • Django 管理员 - 登录

    我正在建造一个Django Web App 与 Django Suit 用于管理界面 已经让 Python 2 7 Django 1 10 和 MySQL 和谐通信并启动了一个项目 python m django admin startpr
  • 我可以从另一个视图中调用一个视图吗?

    我的一个视图需要添加一个项目以及其他功能 但我已经有另一个专门添加项目的视图 我可以做类似的事情吗 def specific add item view request item Item objects create foo reques
  • 如何为 bcrypt.hashpw 设置盐?

    salt yhnqazolr123098765 password bcrypt hashpw password salt repeatpassword bcrypt hashpw repeatpassword salt 我在第二行遇到错误
  • Django modelAdmin __init__ 和内联

    嘿 我对 Django 相当陌生 我正在寻找动态编辑管理类变量 完整的想法是在添加时隐藏内联 仅在编辑时显示 但我在这里提炼这个问题 有人可以解释为什么这不起作用吗 class dbTablePermissionInline admin T
  • 使用 Javascript 在单独的表单页面上使用图像文件名更新隐藏的表单字段

    我有一个定制的 Djangowizard form html它在我的调查的三个不同页面上向用户显示了 3 张不同的图像 我正在尝试使用下面的脚本来更新 3 个不同页面上的 3 个隐藏表单字段 其内容为value display image
  • Django 的登录会话

    我正在尝试在我的网络应用程序中设置登录会话 但无法使其正常工作 我是 django 新手 阅读了会话文档 但没有连接到我的网络应用程序 我现在想要的只是检查用户是否已登录 如果没有则重定向到登录页面 这是我尝试合并登录会话的代码 设置 py
  • Django 如何将自定义变量传递到上下文以在自定义管理模板中使用?

    我正在扩展change list html 我需要输出settings py中定义的变量 如何将该特定变量传递到自定义管理模板上下文中 class MyModelAdmin admin ModelAdmin def changelist v
  • Tastypie 与 application/x-www-form-urlencoded

    我有点难以弄清楚下一步应该做什么 我正在使用 tastypie 为我的 Web 应用程序创建 API 从另一个应用程序 特别是 ifbyphone com 我收到一个没有标题的 POST 如下所示 post data http myapp
  • Facebook 好友请求 - 失踪好友

    我请求从我正在开发的 Android 应用程序中获取用户好友 从 Facebook Api V2 0 开始 我知道我应该只获取已经通过我的应用程序登录的用户好友 但是 尽管我知道用户的某些朋友已通过我的应用程序登录 但在请求该用户的朋友时
  • django - 如何将实际图像文件从一个模型复制到另一个模型?

    我想将项目中的图像从一个模型复制到另一个模型 假设这些是我的模型 class BackgroundImage models Model user models ForeignKey User image models ImageField
  • facebook php - 如何获取专辑封面照片

    我需要使用 PHP SDK Facebook 获取专辑封面照片 我尝试 https graph facebook com ALBUM ID picture type album 但我得到默认图像 例如 获取用户 https graph fa
  • 使用 nginx 在云上部署 django 和 React

    我有一个 digitalocean 服务器 并且已经使用 Gunicorn 和 nginx 部署了 Django 后端服务器 如何在同一台服务器上部署 React 应用程序 您可以构建 React 应用程序并使用 Nginx 提供其静态文件
  • Django 多个具有相同名称的输入字段值

    我需要一些帮助 如何处理具有多个输入字段值且名称相同的表单 而且只有一次查看 这实际上是针对基本问题的形式 我发现这个方法的另一个想法https stackoverflow com a 478406 6396981 https stacko
  • 模型字段的随机/非常量默认值?

    我有一个看起来像这样的模型 class SecretKey Model user ForeignKey User related name secret keys created DateTimeField auto now add Tru
  • 使用 Http Post 发送图像

    我想使用 Http Post 将图像从 android 客户端发送到 Django 服务器 该图像是从图库中选择的 目前 我正在使用列表值名称 Pairs 将必要的数据发送到服务器并接收来自 Django 的 JSON 响应 是否可以对图像
  • django.db.utils.ProgrammingError:关系“django_content_type”不存在

    我有一个项目 我在我的电脑上慢慢建立起来 并且运行良好 我只是想将它放到服务器上 但收到此错误 django db utils ProgrammingError 关系 django content type 确实 不存在 我无法解决这个问题
  • 如何让 Django 和 ReactJS 协同工作?

    New to Django and even newer to ReactJS I have been looking into AngularJS and ReactJS but decided on ReactJS It seemed
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from

随机推荐