Django 和 mozilla_django_oidC语言 如何退出会话?



我已经使用mozilla_django_oidc包成功地将Django测试应用程序与我们的Okta IAM服务集成在一起。现在我可以使用 Okta 登录,这很酷。

但是现在我想再次退出会话- 我似乎无法做到。mozilla_django_oidc基本上提供了三个URL:

  • name=oidc_authentication_callback
  • name=oidc_authentication_init(用于"登录"链接的那个(
  • name=oidc_logout

天真地,我只是将该代码添加到我的应用程序中,并期望一个有效的注销:

{% if user.is_authenticated %}
<p>{{ user.email }} - <a href="{% url 'oidc_logout' %}">Logout</a></p>
{% else %}
# etc.
{% end %}

问题是:logout端点只接受 POST 请求。

现在,如何退出会话?

我用这个技巧来解决问题

文件 settings.py

OIDC_OP_LOGOUT_ENDPOINT = "https://{...}/auth/realms/{...}/protocol/openid-connect/logout"
OIDC_OP_LOGOUT_URL_METHOD = "main.openid.logout"

我在主文件夹中创建了一个文件openid,并带有方法注销

main.openid.py

logout_endpoint = import_from_settings("OIDC_OP_LOGOUT_ENDPOINT", "")
return logout_endpoint + "?redirect_uri=" + request.build_absolute_uri("/")

我创建了一个从OIDCLogoutView继承的视图LogoutView

view.py

class LogoutView(OIDCLogoutView):
def get(self, request):
return self.post(request)

最后

urls.py

path('logout', views.LogoutView.as_view(), name='logout')

因此,当我在我的http链接(GET方法(中使用注销方法时,它将重定向到将重定向到当前站点主页的OIDC_OP_LOGOUT_ENDPOINT

最新更新