我已经使用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