1. 程式人生 > >自定義認證後臺和QQ第三方登入

自定義認證後臺和QQ第三方登入

有很多網站的登入不但可以使用網站賬號密碼,還能用註冊的郵箱和手機號進行登入,現在就用Django實現這個功能。

Django預設的認證方式是使用username和password欄位進行認證的,我們可以加上一個通過email欄位獲取使用者的認證後臺來登入。一個認證後臺就是一個實現了authentication和get_user方法的python類,首先在應用目錄建立一個authenticate.py檔案,編輯程式碼:

from dajngo.contrib.auth.models import User
class EmailAuthenBackend(object):
    def authentication(self,username=None,password=None):
        try:
            user = User.objects.get(email=username)
            if user.check_password(password):
                return user
        except User.DoesNotExist:
		return None
    def get_user(self,user_id):
	try:
	    return User.objects.get(pk=user_id)
	except User.DoesNotExist:
	    return None

authentication方法接受任意的引數,也就是說我們可以定製任意欄位來進行登入,例如電話使用者名稱之類的,這個函式將使用者資訊當成引數,如果認證成功返回True,失敗就返回False,get_user方法將使用者id當成引數,需要返回一個使用者物件。

最後在settings.py設定:

AUTHENTICATION_BACKENDS=['django.contrib.auth.backends.ModelBackend',#預設的後臺

'blog.authenticate.EmailAuthenBackend'#假設我們的應用名為blog]

注意,Django認證會對每個後臺按順序進行,例如在這裡先在第一個後臺查詢,找到了就停止,沒找到就接著查詢下一個,直到查詢完成為之,如果所有後臺都查詢不到才會彈出錯誤資訊。

第三方登入

這裡使用social-auth進行登入,這是一個非常簡單好用的第三方登入應用,裡面集成了大部分社交軟體如微博,QQ,Facebook等,使用方法都差不多。 首先申請QQ互聯,在open.qq.com申請。完成後會獲得app_id和secret_key。 安裝認證框架: pip install python-social-auth pip install social-auth-app-django 兩個都要安裝,如果沒安裝完的話又可能會migrate失敗 在INSTALLED_APP里加入這兩項: INSTALLED_APP=[

'social_django',

'social.apps.django_app.default'

]

更新資料庫:python manage.py migrate

在認證後端AUTHENTICATION_BACKENDS新增qq認證:

AUTHENTICATION_BACKENDS=[

'social_core.backends.qq.QQOAuth2'

]

新增ID和KEY:

SOCIAL_AUTH_QQ_KEY='app_id'

SOCIAL_AUTH_QQ_SECRET='secret_key'

SOCIAL_AUTH_QQ_USER_OPENID_AS_USERNAME=True

在根路由新增URL:

urlpatterns = [

url('',include('social_django.urls',namespace='social'))

]

在需要登入的地方加入:

<a href='{% url 'social:begin' 'qq' %}'>QQ登入</a>