我们有一个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支持的库,看看这是否有帮助。
我也从我的项目分享解决方案
- 创建一个名为graphql mutation的facebookAuth
- 以上突变将接受两个参数
access_token
和access_verifier
- 发送GET请求到此url
f"https://graph.facebook.com/me?fields=name,email&access_token={access_token}"
- 如果json response中有
errors
键,则禁止用户登录。 - 否则上面的响应将包含
email
,使用它创建/获取User
对象。 现在您只需要从您的mutate函数返回JWT令牌。 - 要生成访问和刷新令牌,调用
jwt_encode
函数,导入为from dj_rest_auth.utils import jwt_encode
- 将返回元组access_token, refresh_token
注意,我使用了dj_rest_auth而不是django-graphql-jwt,但这是相当等效的,你只需要一个函数来签署JWT,其余的都是自定义逻辑,所以最好自己写。
PS: OAuth是攻击者的敏感入口点,因此实现是安全的,您可以联系atul7555[at]gmail.com寻求任何帮助。