python +django 实现码云(gitee)三方登陆
参考博客:https://v3u.cn/a_id_154
https://www.cnblogs.com/anle123/p/13446182.html
gitee开发文档:https://gitee.com/api/v5/oauth_doc#/list-item-1
官网地址:https://gitee.com/
OAuth2 认证基本流程
首先注册码云的账号,并且新建三方应用
a. 点击自己的头像进入设置页面
b.点击新建三方应用
\(~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\)
3.填写应用相关信息,勾选应用所需要的权限。其中: 回调地址是用户授权后,码云回调到应用,并且回传授权码的地址
\(~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\)
应用主页:要求不严格,测试用的话可以直接填http://127.0.0.1:8000/
应用回调地址 :这里要填写自己定义的视图路由,我自己的为http://127.0.0.1:8000/gitee_back
\(~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\)
4.创建成功后,会生成 Cliend ID 和 Client Secret。他们将会在上述OAuth2 认证基本流程用到
vue端代码
我们这里直接使用window.location.href = url;进行调转。
这里只写一个点击方法
//gitee登陆
gitee:function(){
//创建应用后生成的Cliend ID
var clientId = '*********************************'
//应用回调地址
var redirect_uri = 'http://127.0.0.1:8000/gitee_back'
//拼接要请求的地址
var url = 'https://gitee.com/oauth/authorize?client_id='+clientId+'&redirect_uri='+redirect_uri+'&response_type=code'
// 进行跳转
window.location.href = url;
},
\(~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\)
随后的流程可以参照官方文档:https://gitee.com/api/v5/oauth_doc#/
django代码
第一步,通过 浏览器 或 Webview 将用户引导到码云三方认证页面上( GET请求 )
class Gitee(View):
def get(self,request):
return redirect("https://gitee.com/oauth/authorize?client_id=你的应用id&redirect_uri=http://localhost:8000/gitee_back&response_type=code")
\(~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\)
第二步,如果用户授权登录成功,gitee则会通过回调网址将code传递给第三方应用,此时三方应用可以通过code换取access_token
class GiteeBack(View):
def get(self,request):
code = request.GET.get("code",None)
r = requests.post("https://gitee.com/oauth/token?grant_type=authorization_code&code=%s&client_id=你的应用id&redirect_uri=http://localhost:8000/gitee_back&client_secret=你的应用秘钥" % code)
print(r.text)
return HttpResponse("ok")
\(~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\)
这里我们以基础用户信息接口为例子
r = requests.get("https://gitee.com/api/v5/user?access_token=获取到的accesstoken")
print(r.text)
最后我们会得到一个用户信息。
\(~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\)
总结:
用户通过前端点击gitee登陆图标,跳转到gitee授权页面点击授权我们会获取到用户token,通过token去请求换取用户身份信息