如何在django-graphql-jwt中集成Facebook登录?



我们有一个django项目,在我们的项目中使用Graphene-Django库来实现GraphQL API。这个后端由我们的移动应用程序访问。对于应用程序的身份验证,我们使用django-graphql-jwt库,这是Django中使用GraphQL方法的JSON Web Token库。

现在我们想在我们的系统中实现Facebook登录,并在Facebook中进行身份验证。通过身份验证后,从移动应用程序发送到我们后端的只有用户的电子邮件。没有密码如何在django-graphql-jwt中注册和认证用户?或者是否有更好的工作流程?

After authentication, what will be sent to our backend from the mobile app is only the email of the user.

嘿,Al Ryan,这似乎是一个错误的OAuth实现,你从facebook得到的是一个令牌,你把这个令牌发送给你的服务器,它会把它发送回facebook来验证它不是伪造的,然后只有用户可以登录。

否则任何人都可以用电子邮件调用服务器并充当该用户。

这是一个具有社会认证和JWT支持的库,看看这是否有帮助。

我也从我的项目分享解决方案

  1. 创建一个名为graphql mutation的facebookAuth
  2. 以上突变将接受两个参数access_tokenaccess_verifier
  3. 发送GET请求到此urlf"https://graph.facebook.com/me?fields=name,email&access_token={access_token}"
  4. 如果json response中有errors键,则禁止用户登录。
  5. 否则上面的响应将包含email,使用它创建/获取User对象。
  6. 现在您只需要从您的mutate函数返回JWT令牌。
  7. 要生成访问和刷新令牌,调用jwt_encode函数,导入为from dj_rest_auth.utils import jwt_encode
  8. 将返回元组access_token, refresh_token

注意,我使用了dj_rest_auth而不是django-graphql-jwt,但这是相当等效的,你只需要一个函数来签署JWT,其余的都是自定义逻辑,所以最好自己写。

PS: OAuth是攻击者的敏感入口点,因此实现是安全的,您可以联系atul7555[at]gmail.com寻求任何帮助。

最新更新