gpt4 book ai didi

python - TypeError: prepare_request_body() 得到了关键字参数 'redirect_uri' 的多个值

转载 作者:太空宇宙 更新时间:2023-11-04 01:08:29 25 4
gpt4 key购买 nike

我正在尝试将 Google OAuth2 与 requests-oauthlib 结合使用。我已经尝试过使用 Ajax 之类的东西,但是为了使用 Google OAuth2 数据登录到 Django 后端,我似乎必须使用像这样的库。 (因为他们提供了一个随时可用的中间件和一个身份验证后端,我不想写那些东西)

我遇到的另一个问题是我使用基于类的 View ,但教程只显示基于函数的 View 。

好吧,在我从 Google 获得代码后,我正在尝试获取访问 token 。问题是我无法让它工作。

这就是魔法发生的地方(好吧..不是真的):

class LoginView(RedirectView):

authorization_base_url = r'https://accounts.google.com/o/oauth2/auth'
token_url = r'https://accounts.google.com/o/oauth2/token'
client_id = r'Totally forgot that one'
client_secret = r'Super, super secret'
redirect_uri = 'http://localhost:8000/de/callback'
scope = [r'email',
r'https://www.googleapis.com/auth/userinfo.profile']

def get(self, request):

google = OAuth2Session(self.client_id,
redirect_uri = self.redirect_uri,
scope=self.scope)

authorization_url, state = google.authorization_url(
self.authorization_base_url,
access_type='offline',
approval_prompt="force")

request.session['oauth_state'] = state

return redirect(authorization_url)

这很好用。接下来,在我从 Google 回来之后:

class CallbackView(RedirectView):

def get(self, request):
r = request.GET.copy()

google = OAuth2Session(LoginView.client_id,
state = request.session['oauth_state'])

authorization_response = (LoginView.redirect_uri +
"/callback?state=" + request.session['oauth_state'] +
"&code=" + r['code'])

token = google.fetch_token(LoginView.token_url,
authorization_response = authorization_response,
client_secret = LoginView.client_secret,
redirect_uri = LoginView.redirect_uri,
)

...

当然还有我的回溯:

Traceback:
File "/home/patrik/.virtualenvs/cms/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
112. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/patrik/.virtualenvs/cms/local/lib/python2.7/site-packages/django/views/generic/base.py" in view
69. return self.dispatch(request, *args, **kwargs)
File "/home/patrik/.virtualenvs/cms/local/lib/python2.7/site-packages/django/views/generic/base.py" in dispatch
87. return handler(request, *args, **kwargs)
File "/home/patrik/Schreibtisch/cms/cmsproject/apps/topics/views.py" in get
106. redirect_uri = LoginView.redirect_uri,
File "/home/patrik/.virtualenvs/cms/local/lib/python2.7/site-packages/requests_oauthlib/oauth2_session.py" in fetch_token
167. password=password, **kwargs)

Exception Type: TypeError at /de/callback
Exception Value: prepare_request_body() got multiple values for keyword argument 'redirect_uri'

错误从何而来?

最佳答案

fetch_token() 方法不应传递 redirect_uri 参数。它将改为从实例属性 google.redirect_uri 提供此参数。

换句话说,将它交给 OAuth2Session 构造函数:

google = OAuth2Session(
LoginView.client_id,
state = request.session['oauth_state'],
redirect_uri = LoginView.redirect_uri)

关于python - TypeError: prepare_request_body() 得到了关键字参数 'redirect_uri' 的多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29079300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com