gpt4 book ai didi

python - 在 Django 中使用 oauth 进行身份验证的装饰器

转载 作者:行者123 更新时间:2023-12-04 10:07:00 24 4
gpt4 key购买 nike

我正在尝试使用 Django 中的装饰器完成 Oauth1。在我尝试使用装饰器之前,我一直使用这个端点 oauth (工作正常):

注:OSCAR_CALLBACK_URLoauth 的 URL仅端点

def oauth(request):
if not request.GET.get('oauth_verifier'):
return oscar_oauth_init(request)
else:
res = oscar_oauth_accesstoken(request)
return res

def oscar_oauth_init(request):
oauth = OAuth1(OSCAR_CLIENT_ID, client_secret=OSCAR_CLIENT_SECRET)
url=OSCAR_INIT_URL+OSCAR_CALLBACK_URL
r = requests.get(url=url, auth=oauth)
credentials = convert(parse_qs(r.content))
resource_owner_key = str(credentials.get('oauth_token')[0])
resource_owner_secret = str(credentials.get('oauth_token_secret')[0])
verifier = oscar_oauth_auth(resource_owner_key)
request.session['resource_owner_key'] = str(resource_owner_key)
request.session['resource_owner_secret'] = str(resource_owner_secret)
request.session['verifier'] = str(verifier)
return verifier


def oscar_oauth_accesstoken(request):
verifier = request.GET.get('oauth_verifier')
resource_owner_key = request.GET.get('oauth_token')
resource_owner_secret = request.session.get('resource_owner_secret')
oauth = OAuth1(OSCAR_CLIENT_ID,
client_secret=OSCAR_CLIENT_SECRET,
resource_owner_key=resource_owner_key,
resource_owner_secret=resource_owner_secret,
verifier=verifier)

r = requests.get(url=OSCAR_TOKEN_URL+verifier, auth=oauth)
credentials = convert(parse_qs(r.content))
resource_owner_key = credentials.get('oauth_token')[0]
resource_owner_secret = credentials.get('oauth_token_secret')[0]
request.session['resource_owner_key'] = str(resource_owner_key)
request.session['resource_owner_secret'] = str(resource_owner_secret)
return credentials

需要在其他需要用户授权的 API 调用之前调用此端点。

我现在正在尝试使用以下装饰器重构它:
def oscar_login(view_func):
def _wrapped_view_func(request, *args, **kwargs):
if not request.GET.get('oauth_verifier'):
return oscar_oauth_init(request)
else:
return oscar_oauth_accesstoken(request)
return view_func(request, *args, **kwargs)
return _wrapped_view_func

我不确定如何使用装饰器完成重定向位。我允许重定向到同一端点 oauth (上面共享)但是流在我允许重定向到的端点的末尾停止,并且不会继续在通过装饰器之后进行的 API 调用。正确的做法是什么?

最佳答案

通常在 Django 中,装饰器和身份验证是分开的:

  • 装饰器可能是内置的装饰器之一,例如 @login_required @permission_required .
  • 将使用 authentication backend 配置身份验证,可能是现成的(快速谷歌建议 django-oauth-toolkit 作为一种可能性)。

  • 这将应用程序逻辑与身份验证方法分离,使每个部分更易于开发、更新和管理。

    关于python - 在 Django 中使用 oauth 进行身份验证的装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61534968/

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