社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  问与答

关于用django如何做oauth验证

kxx1309 • 9 年前 • 6911 次点击  

最近刚刚过了一遍django的新手教程,想试试看从一个网站的api中获取一些信息。 想实现的功能是当该网站的用户登陆成功后,用oauth让用户授权app并获取该用户的部分信息。

网上找了不少资料,每个人的代码都不一样,django oauth toolkit的官方文档也不是很理解。

现在处于oauth原理理解,但不知道如何下手的情况,以前用flask跟着视频教程一部部走下来会写google sign in的授权,但对于django, 看到一大堆代码都没什么解释头非常大。

不知道大家有没有什么好的教程可以推荐,本人比较笨,一步步来才能理解,还是说应该回去把django剩下的官方文档全部过一遍?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/1252
 
6911 次点击  
文章 [ 9 ]  |  最新文章 9 年前
正小歪
Reply   •   1 楼
正小歪    9 年前

先去 了解一下oauth2, 原理。 然后就去开发者文档里找接口,
所有的oauth2 都是差不多的。

mugbya
Reply   •   2 楼
mugbya    9 年前

@kxx1309

... 形式如下:

          <a href="https://github.com/login/oauth/authorize?client_id=dd90d6225d6bb60bf7a5&redirect_uri=http://127.0.0.1:8000/oauth/github&state={{state}}" title="GitHub 登录">

          </a>

模板中是不提供client_secret ,state 也是可选的

kxx1309
Reply   •   3 楼
kxx1309    9 年前

@mugbya 但是在template中以怎样的格式发送client_id, client_secret 这种数据给authorization server 呢?

mugbya
Reply   •   4 楼
mugbya    9 年前

@kxx1309 第一次请求是在模板中的链接,然后后续就用第三方库向authorization server获取信息。

博主用的是urllib,我自己改了下,用的requests跟authorization server 互动

你说的那个我没用的

kxx1309
Reply   •   5 楼
kxx1309    9 年前

查了老半天都不知道怎么向authorization server 发送请求,是不是要用到django-oauth2-provider?好复杂。。。能加微信详细询问吗?

mugbya
Reply   •   6 楼
mugbya    9 年前

@kxx1309

  1. 新增的函数全部在 get_redirect_url 中进行调用了...仔细看。 你说不是问题

2.对的

3.redirect_uri 不是随便写的,这个oauth 有详细说明的

4."待用户点击授权后,正式运行这个class里的method并重定向到应用主页。" 我觉得这个说法有待商榷,授权的时候就已经进类里面执行了方法了。

这个基本写的蛮清楚的,我就是看的这个才窥见一斑。 如果有问题还是说说具体的吧

kxx1309
Reply   •   7 楼
kxx1309    9 年前

@mugbya 我看完了这个教程,但是我还是不是很理解。

1 他是用redirect view完成的,原先这个class-based view method的使用顺序是dispatch(), http_method_not_allowed(),get_redirect_uri(), 那新添加进去的两个function和原来三个function会如何排序?

2 向authorization server发送请求这一块内容是不是写在template里面(比如login.html)?

3 redirect_uri是不是随便写?因为我之前用flask写的一个小应用,按照教程走,授权后重定向的url并不是之前就设定好的,而是直接在redirect函数里直接写明了要跳转的url。

4 最后我想整理下我阅读完那篇文章后的大概思路,但还有些不懂,希望能指正其中的不对。 1)首先在一个template中构建这个第三方登陆按钮(假设是login.html),这个button是链接到http://github.com/login/oauth/authorize, 同时得提供client_id, client_secret, scope(optional), redirect_uri(optional)。 2)点击这个按钮后,向authorization server发送请求,并且开始调用GithubOauthView,待用户点击授权后,正式运行这个class里的method并重定向到应用主页。

(对于具体实现的步骤先后还是有些模糊,希望能有大神指点一二,感激不尽)

kxx1309
Reply   •   8 楼
kxx1309    9 年前

非常感谢你的帮助!!!

mugbya
Reply   •   9 楼
mugbya    9 年前

我之前做这个也搜集了一堆资料,现在分享下.

主要看的这个教程:第三方账号登录 (这个是根据原理一步步来的,没用oauth的集成模块)

因为你oauth原理都理解,所以那些基础都不贴了。