Django和mozilla_django_oidc-如何注销会话?

时间:2018-10-03 20:31:19

标签: python openid openid-connect oidc

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

但是现在我想再次注销会话的 -看来我做不到。 mozilla_django_oidc基本上提供了三个URL:

我只是天真地将代码添加到了我的应用程序中,并期望可以正常注销:

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

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

现在,我如何注销会话?

1 个答案:

答案 0 :(得分:1)

我用这个技巧解决了问题

文件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,它将重定向到当前站点的首页