1

我正在實施social-app-django(不是棄用的;依賴於Python-social-auth的)與django 1.11(不使用Mongo)。我的應用程序需要存儲和處理用戶以外的大量數據,而不是從登錄時從其社交媒體帳戶中獲取的數據。在Social-App-Django中擴展用戶模型或自定義管道

當用戶進行身份驗證時,我不需要獲取或收集任何額外數據,但他們在我的網站上執行的各種操作都需要保存到他們的用戶模型中。我想知道其中的下列方法是首選(我搜索網上廣泛,但找不到爲什麼要使用一個VS另外一個具體的解釋):

  • 在創建我自己的用戶我的模型應用程序的models.py(稱爲MyUser)沒有擴展任何特殊功能,然後在身份驗證管道中添加一個函數,該函數將social-app-django用戶與相應的MyUser實例相關聯。保持AUTH_USER_MODELSOCIAL_AUTH_USER_MODEL不變。

    或...

  • 創建我的應用程序的models.py我自己的用戶模型,並在項目的settings.py設置AUTH_USER_MODELSOCIAL_AUTH_USER_MODEL指向MyUser。保持管道不變。在這種情況下,我想知道是否有人可以澄清什麼MyUser及其管理器應該擴展,以及我需要在modules.py中導入什麼(我很困惑,因爲很多堆棧溢出帖子指的是此模塊的已棄用版本,而我不斷收到錯誤)。此外,在這種情況下,我應該設置兩個AUTH_USER_MODELSOCIAL_AUTH_USER_MODEL,或者只是其中之一?

這兩種方法實質上是否達到同樣的效果?出於某種原因,更可靠/首選嗎?或者,我應該兩個都做?非常感謝您的幫助。

另一個細節:我想能夠訪問用戶數據庫不僅從我目前正在建設的應用程序,但也從其他應用程序(在同一個Django項目中),我將在未來構建。這會影響任何事情嗎?

回答

1

因爲我看到這有很多不錯的意見,所以我會發布我最終找到的解決方案。

djangosocial-app-django(或任何其他社交認證模塊)均使用默認的User模型進行認證。雖然可以編輯這個模型來添加自定義參數,但我不推薦它。這不是很好的抽象或模塊化。如果您在配置模型時犯了錯誤,您不僅會破壞網站上的特定功能,還可能會破壞認證本身。

如果您需要進行影響認證流程本身的更改(例如,添加您自己的自定義認證提供程序),我可以考慮的唯一情況是您希望編輯默認用戶模型本身。

創建名爲UserProfile的新模型要求與User對象具有所需的一對一關係要容易和安全。現在,您可以將User對象視爲驗證部分,將UserProfile對象視爲內容/存儲部分。您不必經常與User模型混淆,並且UserProfile模型對於身份驗證目的而言並不重要。請注意,在此配置中,您不需要更改settings.py文件中的AUTH_USER_MODELSOCIAL_AUTH_USER_MODEL字段。

如果採取這種方法,你將需要添加的驗證管道,在其中創建一個新的UserProfile對象,並將其與誰是目前登錄的User關聯一個自定義步驟。