导读:本期聚焦于小伙伴创作的《Python OAuth2.0怎么接GitHub和微信第三方登录授权开发》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Python OAuth2.0怎么接GitHub和微信第三方登录授权开发》有用,将其分享出去将是对创作者最好的鼓励。

在Python项目里接入OAuth2.0实现GitHub和微信第三方登录,核心都是走授权码模式。应用先引导用户跳到平台授权页,用户同意后被重定向回我们的回调地址并带上code,后端再用code换token,最后拿token调接口取资料。下面用一张示意图帮助理解整体流程。

Python OAuth2.0怎么接GitHub和微信第三方登录授权开发

一、OAuth2.0授权码模式基本步骤

不管是GitHub还是微信,标准授权码流程都包含四个角色:用户、第三方应用、授权服务器、资源服务器。典型步骤如下:

  • 在平台注册应用,拿到client_id和client_secret
  • 拼接授权URL,带redirect_uri和scope引导用户跳转
  • 用户授权后,平台回调我们的地址并携带code参数
  • 后端用code加密钥请求token接口,得到access_token
  • 携带token访问用户信息接口,完成登录态写入

二、GitHub第三方登录开发

1. 构造授权链接

GitHub的授权端点为https://github.com/login/oauth/authorize,scope常用user:email。下面用Python生成跳转地址:

import urllib.parse

client_id = "你的github_client_id"
redirect_uri = "https://yourdomain.com/callback/github"
scope = "user:email"

params = {
    "client_id": client_id,
    "redirect_uri": redirect_uri,
    "scope": scope,
    "state": "random_state_string"
}
auth_url = "https://github.com/login/oauth/authorize?" + urllib.parse.urlencode(params)
print(auth_url)

2. 处理回调并换token

用户在GitHub同意授权后,浏览器访问我们的callback并带code。我们用requests向后端换token:

import requests

code = "从回调query参数拿到"
token_url = "https://github.com/login/oauth/access_token"
resp = requests.post(token_url, headers={"Accept": "application/json"}, data={
    "client_id": "你的github_client_id",
    "client_secret": "你的github_client_secret",
    "code": code,
    "redirect_uri": "https://yourdomain.com/callback/github"
})
access_token = resp.json().get("access_token")

3. 拉取GitHub用户信息

user_resp = requests.get("https://api.github.com/user", headers={
    "Authorization": f"token {access_token}"
})
user_info = user_resp.json()
print(user_info.get("login"), user_info.get("id"))

三、微信第三方网站登录开发

1. 微信授权链接

微信开放平台网站应用授权地址是https://open.weixin.qq.com/connect/qrconnect,scope填snsapi_login:

import urllib.parse

wx_params = {
    "appid": "你的微信appid",
    "redirect_uri": "https://yourdomain.com/callback/wechat",
    "response_type": "code",
    "scope": "snsapi_login",
    "state": "random_state"
}
wx_auth_url = "https://open.weixin.qq.com/connect/qrconnect?" + urllib.parse.urlencode(wx_params) + "#wechat_redirect"
print(wx_auth_url)

2. 用code换access_token

微信的token接口返回openid,需要注意它和GitHub字段命名不同:

import requests

wx_code = "回调拿到的code"
wx_token_url = "https://api.weixin.qq.com/sns/oauth2/access_token"
wx_resp = requests.get(wx_token_url, params={
    "appid": "你的微信appid",
    "secret": "你的微信secret",
    "code": wx_code,
    "grant_type": "authorization_code"
})
wx_data = wx_resp.json()
access_token = wx_data.get("access_token")
openid = wx_data.get("openid")

3. 获取微信用户信息

wx_user_url = "https://api.weixin.qq.com/sns/userinfo"
wu_resp = requests.get(wx_user_url, params={
    "access_token": access_token,
    "openid": openid
})
wx_user = wu_resp.json()
print(wx_user.get("nickname"), wx_user.get("unionid"))

四、两者差异与注意点

对比项GitHub微信
授权端点github.com/login/oauth/authorizeopen.weixin.qq.com/connect/qrconnect
token接口POST表单GET参数
用户标识idopenid/unionid

开发中要校验state防CSRF,token要安全存储,不要在前端暴露client_secret。使用requests库能大幅简化HTTP交互,遇到微信接口返回乱码可指定resp.encoding。

建议把第三方登录逻辑封装成统一接口,用provider字段区分GitHub与微信,方便后期接入更多平台。

PythonOAuth2.0GitHub_登录修改时间:2026-07-28 15:27:32

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。