私たちのDjangoデプロイメントは、LDAPディレクトリの外でまだアクティブなユーザーを見つけることができるかどうかを毎晩チェックします。それらがもう見つからない場合は、非アクティブに設定します。次回ログインしようとすると、これを行うコードは次のとおりです。
def synchronize_users_with_ad(sender, **kwargs):
"""Signal listener which synchronises all active users without a usable
password against the LDAP directory. If a user cannot be
found anymore, he or she is set to “inactive”.
"""
ldap_connection = LDAPConnection()
for user in User.objects.filter(is_active=True):
if not user.has_usable_password() and not existing_in_ldap(user):
user.is_active = user.is_staff = user.is_superuser = False
user.save()
user.groups.clear()
user.user_permissions.clear()
maintain.connect(synchronize_users_with_ad)
ただし、まだログインしている場合、このセッションは引き続き機能しています。どうすればすぐに無効にすることができますか?セッションミドルウェアのすべての設定はデフォルト値です。
を使用してログアウトできます
from Django.contrib.auth import logout
if <your authentication validation logic>:
logout(request)
...任意のビュー内から。
Login_requiredデコレータに加えて、 ser_passes_testデコレータ を使用して、ユーザーがまだアクティブであるかどうかをテストできます。
from Django.contrib.auth import user_passes_test
def is_user_active(user):
return user.is_active
@user_passes_test(is_user_active, login_url='/your_login')
def your_function(request):
....
特定のユーザーのセッションを照会および取得できるセッションバックエンドを使用できます。これらのセッションバックエンドでは、SessionにはUserへの外部キーがあるため、セッションを簡単にクエリできます。
db
、cached_db
セッションバックエンドに基づく)db
セッションバックエンドに基づく)これらのバックエンドを使用すると、ユーザーのすべてのセッションを1行のコードで削除できます。
# log-out a user
user.session_set.all().delete()
免責事項:私はDjango-qsessions
の作者です。