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 突变的 facebookAuth
- 以上突变将采用两个参数
access_token
和access_verifier
- 向此 url 发送 GET 请求
f"https://graph.facebook.com/me?fields=name,email&access_token={access_token}"
- 如果 json 响应有 key
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 联系以获得任何帮助。