1. 程式人生 > >第三方登陸組件

第三方登陸組件

clas ret 一個 ica ngs .py ogl tex 回調

GitHub 中搜索:social django app ==>找到: python-social-auth/social-app-django
文檔: https://python-social-auth.readthedocs.io/en/latest/

# 1. 安裝
pip install social-auth-app-django

# django 配置: https://python-social-auth.readthedocs.io/en/latest/configuration/django.html

# 2. 添加到 INSTALLED_APPS
INSTALLED_APPS = (
    ...
    
social_django, ... ) # 3. 數據庫遷移:第三方登陸的時候,會新建一些額外的數據表 python manage.py migrate # 直接 migrate,不用 makemigrations,因為 migrations文件已經生成好了 # 4. settings 中配置 AUTHENTICATION_BACKENDS (在源碼中查看:social_core/backends) AUTHENTICATION_BACKENDS = ( ... "social_core.backends.weibo.WeiboOAuth2", # 所要添加的第三方登陸;如果還需要其它的第三方登陸,下面可繼續添加
"social_core.backends.qq.QQOAuth2", "social_core.backends.weixin.WeixinOAuth2", django.contrib.auth.backends.ModelBackend, ... ) # 5. 配置 URL urlpatterns = patterns(‘‘, ... url(‘‘, include(social_django.urls, namespace=social)), # 第三方登陸URL;如果已經有用戶登陸,則會將第三方登陸的用戶和當前用戶綁定,否則第三方登陸後將在你的網站上新創建一個用戶
... ) # 6. 對於 Django 的 MTV模式,設置 template <a href="{% url "social:begin" "weibo" %}">微博</a> # social:begin social表示名稱空間,begin表示 name="begin"的那個url; <a href="{% url "social:begin" "google-oauth2" %}">Google+</a> # 7. 配置 Template Context Processors TEMPLATES = [ { ... OPTIONS: { ... context_processors: [ ... social_django.context_processors.backends, social_django.context_processors.login_redirect, ... ] } } ] # 8. 在setting中設置 APP key 和 APP secret SOCIAL_AUTH_WEIBO_KEY = weiboappkey... SOCIAL_AUTH_WEIBO_SECRET = weiboappsecret... # 9. 第三方登陸成功後的跳轉 SOCIAL_AUTH_LOGIN_REDIRECT_URL = /index/ # 10. 對於前後端分離的項目使用 python-social-auth/social-app-django,需要在第三方包 social_core/actions.py 中的 do_complete() 方法中修改源碼(即第三方認證完成後要把 JWT 和 username 通過set_cookie返回給前端),如下: from rest_framework_jwt.serializers import jwt_payload_handler,jwt_encode_handler def do_complete(backend, login, user=None, redirect_name=next, *args, **kwargs): ... response = backend.strategy.redirect(url) # 完成第三方登陸後,所要重定向的URL # 前後端分離的項目中,需要把 JWT 添加到cookie中返回給前端 payload = jwt_payload_handler(user) response.set_cookie("token",jwt_encode_handler(payload),max_age=7*24*3600) # 設置 cookie;一定要加過期時間 max_age response.set_cookie("name",user.name if user.name else user.username,max_age=7*24*3600) return response # 註:微博第三方登陸時,授權回調頁的 地址一定要和本機的IP地址保持一致(如果是在服務器上,就和服務器的IP地址保持一致),如:127.0.0.1:8000/complete/weibo/ 這個回調頁是由微博向你的 瀏覽器 發送了一個重定向的命令;而支付寶的 notify_url 是 支付寶向你的 服務器 發送了一個Post請求

第三方登陸組件