python +django 实现码云(gitee)三方登陆

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 认证基本流程

python +django 实现码云(gitee)三方登陆

首先注册码云的账号,并且新建三方应用

a. 点击自己的头像进入设置页面
b.点击新建三方应用

python +django 实现码云(gitee)三方登陆

\(~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\)

3.填写应用相关信息,勾选应用所需要的权限。其中: 回调地址是用户授权后,码云回调到应用,并且回传授权码的地址

python +django 实现码云(gitee)三方登陆

\(~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\)

应用主页:要求不严格,测试用的话可以直接填http://127.0.0.1:8000/

应用回调地址 :这里要填写自己定义的视图路由,我自己的为http://127.0.0.1:8000/gitee_back

\(~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\)

4.创建成功后,会生成 Cliend ID 和 Client Secret。他们将会在上述OAuth2 认证基本流程用到

python +django 实现码云(gitee)三方登陆

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去请求换取用户身份信息

上一篇:thinkphp3.2 控制器页面跳转和重定向


下一篇:列举 ASP.NET页面之间传递值的几种方式