1、小程序端調用wx.login
2、判斷用戶是否授權
3、小程序端訪問 wx.getUserInfo
4、小程序端js代碼:+
wx.login({
success: resp => {
// 發送 res.code 到後臺換取 openId, sessionKey, unionId
console.log(resp);
var that = this;
// 獲取用戶信息
wx.getSetting({
success: res => {
if (res.authSetting['scope.userInfo']) {
// 已經授權,可以直接調用 getUserInfo 獲取頭像暱稱,不會彈框
wx.getUserInfo({
success: userResult => {
var platUserInfoMap = {}
platUserInfoMap["encryptedData"] = userResult.encryptedData;
platUserInfoMap["iv"] = userResult.iv;
wx.request({
url: 'http://127.0.0.1:5000/user/wxlogin',
data: {
platCode: resp.code,
platUserInfoMap: platUserInfoMap,
},
header: {
"Content-Type": "application/json"
},
method: 'POST',
dataType:'json',
success: function (res) {
console.log(res)
wx.setStorageSync("userinfo", res.userinfo) //設置本地緩存
},
fail: function (err) { },//請求失敗
complete: function () { }//請求完成後執行的函數
})
}
})
}
}
})
}
})
5、後端服務器訪問code2session,通過code2Session這個api接口來獲取真正需要的微信用戶的登錄態 session_key 和 openid 和 unionid
6、後端服務器校驗用戶信息,對 encryptedData 解密
微信小程序登錄後獲得session_key後,返回了encryptedData,iv的數據,其中encryptedData解密後包含了用戶的信息,解密後的json格式如下:
{
"openId": "OPENID",
"nickName": "NICKNAME",
"gender": GENDER,
"city": "CITY",
"province": "PROVINCE",
"country": "COUNTRY",
"avatarUrl": "AVATARURL",
"unionId": "UNIONID",
"watermark":
{
"appid":"APPID",
"timestamp":TIMESTAMP
}
}
7、新建解密文件——WXBizDataCrypt.py
from Crypto.Cipher import AES 這邊一般會遇到 ModuleNotFoundError:No module named "Crypto" 錯誤
(1)執行 pip3 install pycryptodome
(2)如果還是提示沒有該模塊,那就虛擬環境目錄 Lib—-site-package 中查看是否有 Crypto文件夾,這時你應該看到有 crypto 文件夾,將其重命名爲 Crypto 即可
import base64
import json
from Crypto.Cipher import AES
class WXBizDataCrypt:
def __init__(self, appId, sessionKey):
self.appId = appId
self.sessionKey = sessionKey
def decrypt(self, encryptedData, iv):
# base64 decode
sessionKey = base64.b64decode(self.sessionKey)
encryptedData = base64.b64decode(encryptedData)
iv = base64.b64decode(iv)
cipher = AES.new(sessionKey, AES.MODE_CBC, iv)
decrypted = json.loads(self._unpad(cipher.decrypt(encryptedData)))
if decrypted['watermark']['appid'] != self.appId:
raise Exception('Invalid Buffer')
return decrypted
def _unpad(self, s):
return s[:-ord(s[len(s)-1:])]
8、Flask的 /user/wxlogin api代碼:
import json,requests
from WXBizDataCrypt import WXBizDataCrypt
from flask import Flask
@app.route('/user/wxlogin', methods=['GET','POST'])
def user_wxlogin():
data = json.loads(request.get_data().decode('utf-8')) # 將前端Json數據轉爲字典
appID = 'appID' # 開發者關於微信小程序的appID
appSecret = 'appSecret' # 開發者關於微信小程序的appSecret
code = data['platCode'] # 前端POST過來的微信臨時登錄憑證code
encryptedData = data['platUserInfoMap']['encryptedData']
iv = data['platUserInfoMap']['iv']
req_params = {
'appid': appID,
'secret': appSecret,
'js_code': code,
'grant_type': 'authorization_code'
}
wx_login_api = 'https://api.weixin.qq.com/sns/jscode2session'
response_data = requests.get(wx_login_api, params=req_params) # 向API發起GET請求
resData = response_data.json()
openid = resData ['openid'] # 得到用戶關於當前小程序的OpenID
session_key = resData ['session_key'] # 得到用戶關於當前小程序的會話密鑰session_key
pc = WXBizDataCrypt(appID, session_key) #對用戶信息進行解密
userinfo = pc.decrypt(encryptedData, iv) #獲得用戶信息
print(userinfo)
'''
下面部分是通過判斷數據庫中用戶是否存在來確定添加或返回自定義登錄態(若用戶不存在則添加;若用戶存在,返回用戶信息)
--------略略略略略略略略略-------------
這部分我就省略啦,數據庫中對用戶進行操作
'''
return json.dumps
({
"code": 200, "msg": "登錄成功","userinfo":userinfo}, indent=4, sort_keys=True, default=str, ensure_ascii=False)
總結
到此這篇關於Python Flask微信小程序登錄詳解及登錄api實現的文章就介紹到這了,更多相關Python Flask微信小程序登錄詳解及登錄api實現內容請搜索我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支持我們!
時間:2020-06-05
Python的Flask框架中實現登錄用戶的個人資料和頭像的教程
用戶資料頁面 在用戶資料頁面,基本上沒有什麼特別要強調和介紹的新概念.只需要創建一個含有HTML的新視圖函數模板頁面即可. 下面是視圖函數(項目目錄/views.py): @app.route('/user/<nickname>') @login_required def user(nickname): user = User.query.filter_by(nickname = nickname).first() if user == None: flash('不存在用戶:' + nickn
Python Flask 搭建微信小程序後臺詳解
前言: 近期需要開發一個打分的微信小程序,涉及到與後臺服務器的數據交互,因爲業務邏輯相對簡單,故選擇Python的輕量化web框架Flask來搭建後臺程序.因爲是初次接觸小程序,經過一番摸索和嘗試,個人覺得的微信小程序與後臺的交互有點像ajax,所以有ajax開發經驗的同學開發小程序應該很容易上手,因爲本文着重講解後臺程序的搭建,所以,微信小程序的前端開發將一筆帶過,有興趣學習小程序前端語言的同學可移步網易雲課堂的一套快速入門課程<輕鬆玩轉微信小程序>. 分三步講解微信小程序與Python後臺
使用Python的Flask框架表單插件Flask-WTF實現Web登錄驗證
表單是讓用戶與我們的網頁應用程序交互的基本元素.Flask 本身並不會幫助我們處理表單,但是 Flask-WTF 擴展讓我們在我們的 Flask 應用程序中使用流行的 WTForms 包.這個包使得定義表單和處理提交容易一些. Flask-WTF 我們想要使用 Flask-WTF 做的第一件事情(在安裝它以後,GitHub項目頁
:https://github.com/lepture/flask-wtf )就是在 myapp.forms 包中定義一個表單. # ourapp/forms.py fr
Python的Flask框架中實現簡單的登錄功能的教程
回顧 在前面的系列章節中,我們創建了一個數據庫並且學着用用戶和郵件來填充,但是到現在我們還沒能夠植入到我們的程序中. 兩章之前,我們已經看到怎麼去創建網絡表單並且留下了一個實現完全的登陸表單. 在這篇文章中,我們將基於我門所學的網絡表單和數據庫來構建並實現我們自己的用戶登錄系統.教程的最後我們小程序會實現新用戶註冊,登陸和退出的功能. 爲了能跟上這章節,你需要前一章節最後部分,我們留下的微博程序.請確保你的程序已經正確安裝和運行. 在前面的章節,我們開始配置我們將要用到的Flask擴展.爲了登
python使用Flask操作mysql實現登錄功能
用到的一些知識點
:Flask-SQLAlchemy.Flask-Login.Flask-WTF.PyMySQL 這裏通過一個完整的登錄實例來介紹,程序已經成功運行,在未登錄時攔截了success.html頁面跳轉到登錄頁面,登錄成功後才能訪問success. 以下是項目的整體結構圖: 首先是配置信息,配置了數據庫連接等基本的信息,config.py DEBUG = True SQLALCHEMY_ECHO = False SQLALCHEMY_DATABASE_URI = 'mysql+pymy
python實現網站用戶名密碼自動登錄功能
一.概述 公司需要通過網頁用戶認證登錄實現上網,網絡設備判斷當前帳號12小時沒有沒上網將會自動斷開帳號上網,每天早上上班第一件事就是打開用戶認證網頁輸入. 用戶名與密碼,有時候要家裏通過teamview遠程控制軟件連接公司電腦,想讓公司電腦24小時在線,最後通過python實現了自動登錄. 代碼: #_*_ coding:utf-8 _*_ import requests,time s=requests.session() data = [ ('opr', 'pwdLogin'), ('user
在Python程序中操作MySQL的基本方法
Python操作Mysql 最近在學習python,這種腳本語言毫無疑問的會跟數據庫產生關聯,因此這裏介紹一下如何使用python操作mysql數據庫.我python也是零基礎學起,所以本篇博客針對的是python初學者,大牛可以選擇繞道. 另外,本篇基於的環境是Ubuntu13.10,使用的python版本是2.7.5. MYSQL數據庫 MYSQL是一個全球領先的開源數據庫管理系統.它是一個支持多用戶.多線程的數據庫管理系統,與Apache.PHP.Linux共同組成LAMP平臺,在web應
python簡單實現操作Mysql數據庫
用python編寫數據庫的代碼很方便,但是如果不想自己寫sql語句,其實還有更多的討巧辦法.使用webpy的db庫就是不錯的一個選擇.當然爲了使用webpy的db,之前你還需要安裝MySQLdb,其他的就不需要做什麼了. 1.安裝MySQLdb庫 sudo apt-get install python-MySQLdb 2.安裝webpy sudo apt-get install python-webpy 3.連接數據庫 import web db = web.database(dbn='mysq
python使用SQLAlchemy操作MySQL
SQLAlchemy是Python編程語言下的一款開源軟件,提供了SQL工具包及對象關係映射(ORM)工具,使用MIT許可證發行.SQLAlchemy首次發行於2006年2月,並迅速地在Python社區中最廣泛使用的ORM工具之一,不亞於Django的ORM框架. 本文將介紹如何使用SQLAlchemy操作MySQL,完成基礎的表創建,表格數據的新增.查詢.修改.刪除(CRUD)等操作. 首先我們需要確認當前的Python環境下已經安裝sqlalchemy和pymysql模塊. 新建表格 我們使
Java+mysql用戶註冊登錄功能
最近剛剛開始學習mysql,所以就寫了這個很基本的用戶註冊登錄的功能來練練手.雖然這個很簡單,但是我還是看到了自己學習的進步,很開心.哈哈哈. 這裏要注意數據表的建立: 直接上代碼吧,裏面註釋很詳細了. package client; import java.sql.*; import java.util.*; public class Client { /** * 用以實現用戶的註冊和登錄 */ private static String username;//用戶登錄註冊的姓名 privat
Python的Flask框架中實現分頁功能的教程
Blog Posts的提交 讓我們從簡單的開始.首頁上必須有一張用戶提交新的post的表單. 首先我們定義一個單域表單對象(fileapp/forms.py): class PostForm(Form): post = TextField('post', validators = [Required()]) 下面,我們把這個表單添加到template中(
fileapp/templates/index.html): {% extends &
flask 框架操作MySQL數據庫簡單示例
本文實例講述了flask 框架操作MySQL數據庫.分享給大家供大家參考,具體如下: 一.創建數據庫表格 """ Created on 19-10-8 @requirement:Anaconda 4.3.0 (64-bit) Python3.6 @description:創建表格 """ import pymysql server = '127.0.0.1' user = 'root' password = 'password' # 連接數據庫
Python操作MySQL數據庫的三種方法總結
1. MySQLdb 的使用 (1) 什麼是MySQLdb? MySQLdb 是用於 Python 連接 MySQL 數據庫的接口,它實現了 Python 數據庫 API 規範 V2.0,基於 MySQL C API 上建立的. (2) 源碼安裝 MySQLdb:
https://pypi.python.org/pypi/MySQL-python $ tar zxvf MySQL-python-*.tar.gz $ cd MySQL-python-* $ python setup.py buil