2013-06-06 49 views
0

我有一個擁有幾千個註冊用戶的網站。在當有人從偷我的數據庫密碼不幸的事件,我想有一個方案AB計劃。我猜計劃B會更改所有用戶密碼(使用小型python腳本和隨機密碼生成器),並將這些新密碼發送給用戶。我可以輕鬆地做到這一點。Django。如何過期所有用戶密碼?

A計劃(這聽起來更合適,我不知道如何做到這一點),將強制用戶通過過期的舊的,他們第一次攻擊後訪問該頁面來創建新的密碼。

確實Django的有這樣的功能?如何有效和快速地完成?

注:我的用戶/此刻的用戶配置模型沒有設計時考慮到這種情況。

+0

凡用戶的會話位於(如果分貝,你需要清除會話集合/表)?您只需從_your_服務器中刪除所有活動會話 –

+2

我認爲計劃A比計劃B好得多。您需要清除會話數據庫並創建「忘記密碼」視圖或類似信息。在此期間,您只需將數據庫中的所有密碼清空並等待用戶重置。 –

+0

用戶會話位於數據庫中。 – xpanta

回答

4

你應該做的第一件事是關閉所有用戶,以便他們無法登錄。一種方法是使用set_unusable_password()。這將使所有密碼無效;或者您可以將is_active設置爲False。這將禁用用戶批發。

接下來,你可以讓用戶重置其密碼。這也有built-in helpers and forms

+0

+1鏈接到'set_unusable_password',我從來不知道這一點。 –

+0

感謝關於'set_unusable_password()'。因此,我們假設我已經使所有密碼不可用,並以某種方式強制用戶自動重定向到密碼更改表單。新密碼會再次可用嗎? – xpanta

+1

是的,如果您用不同的密碼替換不可用的密碼,它將再次可用。 – Alasdair

0

在我看來,你應該去計劃B.檢查Management Commands

from django.core.management.base import NoArgsCommand 
from django.contrib.auth.models import User 

class Command(NoArgsCommand): 
    help = _('Change password of all users.') 
    def handle_noargs(self, **options): 
     users = User.objects.all() 
     for user in users: 
      # generate random password 
      random_pwd = 'some random password' 
      user.set_password(random_pwd) 
      user.save() 
      # send email to user