【发布时间】:2022-11-02 15:03:19
【问题描述】:
我想让许多不同的客户端能够访问我的 django 网站(更具体地说是它的 API),但我不确定如何使用 django-allauth、dj-rest-auth 和 simplejwt 来做到这一点。
我当前的客户端应用程序使用内置的 django 模板引擎,并使用 django-allauth 进行社交身份验证(Google 等)。它正在使用记录在案的安装建议。
我现在想创建不同类型的客户端不是使用 django 模板引擎(例如 Angular、Vue、flutter mobile 等),但我很困惑如何使用 dj-rest-auth 以便它可以扩展以支持任意数量的客户端类型。
以 Google 社交登录为例,当我创建一个新客户端时,我必须注册一个特定于该客户端的新 redirect_uri。
为了测试这一切,我创建了一个带有单个链接的简单烧瓶应用程序,以便我可以在将“代码/access_token”发送到我的 Django 应用程序之前检索它。该链接是使用以下内容创建的...
var codeRequestUrl =
`https://accounts.google.com/o/oauth2/v2/auth?\
scope=email&\
access_type=offline&\
include_granted_scopes=true&\
response_type=code&\
state=state_parameter_passthrough_value&\
redirect_uri=http%3A//127.0.0.1:5000/callback&\
client_id=${clientId}`;
...并在烧瓶中的“/回调”端点检索代码...
@app.route("/callback", methods=['GET'])
def redirect():
code = request.args.get('code', '')
req = requests.post('http://127.0.0.1:8000/api/dj-rest-auth/google/', data={'code':code})
return "done..."
...从那里我将 x-www-form-urlencoded POST 请求发送回根据其文档设置的 dj-rest-auth 端点...
class GoogleLogin(SocialLoginView):
callback_url = 'http://127.0.0.1:5000/callback'
adapter_class = GoogleOAuth2Adapter
client_class = OAuth2Client
...
urlpatterns += [
...
path('dj-rest-auth/google/', GoogleLogin.as_view(), name='google_login'),
....
]
Django 然后成功返回access_token、refresh_token 和一些关于登录用户的信息。
但这不是可以很好扩展的东西。如果我还要创建一个 Angular 客户端,我需要注册一个不同的回调(因为 Angular 客户端将在不同的端口和/或地址上运行,并且我还需要在 urls.py 中设置另一个路径并将其与可以处理不同 callback_url (redirect_uri) 的新 SocialLoginView 子类相关联。
考虑到这一切,我不知道如何使用颤振的移动应用程序来完成所有这些工作,据我所知,它没有 callback_url 的概念,所以我不确定如何发出 POST 请求考虑到我会立即收到redirect_uri_mismatch 错误,.../dj-rest-auth/google/ 甚至可以工作。
我是不是把它弄反了,在谷歌注册的客户端是 Angular、Vue、Flash 等应用程序?这意味着每个客户端都必须处理自己的 client_id 和 client_secret,这似乎绕过了 django-allauth 和 dj-rest-auth 的功能。
我觉得我误解了这一点,所以我真的很感激一些建议。
【问题讨论】:
标签: django google-signin django-allauth dj-rest-auth