【发布时间】:2021-10-17 17:03:00
【问题描述】:
所以我使用DRF Social Oauth2 在 DRF 中实现社交身份验证。
在设置settings.py 时,我们需要做很多事情,比如将一些应用添加到已安装的应用等。
我们还需要设置这两个设置;
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = 'google_client_id'
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = 'google_client_secret'
但是当我们为 android 创建一个谷歌控制台应用程序时,它不提供任何秘密,而只提供 client_Id。
我所做的是我刚刚从设置中删除了SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = 'google_client_secret',我的 api 仍然可以正常工作。它给出了没有任何错误的响应。
之后,我也尝试删除 SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = 'google_client_id',但我的 api 仍然运行良好。
所以我现在很困惑我们为什么要使用它们?为什么即使没有 client_id 和 secret,我的应用也能正常运行?
这就是我发送请求的方式;
http://127.0.0.1:8000/social/auth/token
请求正文;
{
"grant_type": "password",
"username": "myusername",
"password": "mypassword",
"client_id": "client id created in my backend when creating a new application for the social login (different from google client id)",
"client_secret": "client secret created in my backend when creating a new application for the social login (different from google client secret)"
}
输出:
{
"access_token": "some_token",
"expires_in": 36000,
"token_type": "Bearer",
"scope": "read write",
"refresh_token": "some_other_token"
}
另一个保存用户的请求;
http://127.0.0.1:8000/social/auth/convert_token
{
"token": "token recieved from frontend from google",
"backend": "google-oauth2",
"grant_type": "convert_token",
"client_id": "...",
"client_secret": "..."
}
OUTPUT 与第一个请求相同,它还将详细信息添加到数据库中。
【问题讨论】:
-
即使你要求一个新的访问令牌它仍然有效吗?
-
是的,它有效。让我编辑我的问题以显示我如何发送请求。
-
好的,您手动构建请求了吗?如果你没有使用
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET,那么请求中的值是从哪里来的? -
正如我在问题中提到的,我正在使用 DRF Social oauth2,它在设置社交身份验证应用程序时提供这些凭据。
-
首先我认为它可能只是在创建令牌,但我真的很惊讶它能够访问 google 帐户数据并将其存储在数据库中。
标签: django-rest-framework token google-login python-social-auth