在上一篇文章中,你们应该对验证与受权有了必定的认识,可是对于一些小型网站,本身维护一个用户系统有些多余,而且每每用户也不肯意经历麻烦的流程在小网站注册一个帐户。这是很OAuth
就显得颇有用了,如今不少网站都会有QQ登陆、微信登陆等,很是方便,可是对于先后端分离的项目,使用OAuth
会与传统流程有些不一样,这篇文章How to Integrate OAuth 2 Into Your Django/DRF Back-end Without Going Insane讲解地很详细,建议你们去看看。前端
针对Django REST framework
已经有人为咱们封装了一个很是易用的库,能够经过pip
下载:python
$ pip install django-rest-framework-social-oauth2
别忘了在安装前激活虚拟环境,安装完后,打开backend/settings.py
文件,注册应用:git
INSTALLED_APPS = ( # ... 'oauth2_provider', 'social_django', 'rest_framework_social_oauth2', )
同时修改backend/urls.py
:github
urlpatterns = [ # ... path('auth/', include('rest_framework_social_oauth2.urls')), ]
其它配置:django
TEMPLATES = [ { # ... 'OPTIONS': { 'context_processors': [ # ... 'social_django.context_processors.backends', 'social_django.context_processors.login_redirect', ], }, }, ] REST_FRAMEWORK = { ... 'DEFAULT_AUTHENTICATION_CLASSES': ( # ... 'oauth2_provider.contrib.rest_framework.OAuth2Authentication', 'rest_framework_social_oauth2.authentication.SocialAuthentication', ), } AUTHENTICATION_BACKENDS = ( 'social_core.backends.github.GithubOAuth2', 'rest_framework_social_oauth2.backends.DjangoOAuth2', 'django.contrib.auth.backends.ModelBackend', )
官方示例给了使用Facebook
和Google
的示例,可是因为众所周知的缘由,这两个网站并不不存在,咱们仍是使用全球最大同性交友网站Github吧。完成上述配置后,咱们去设置Github
,注册咱们的app。后端
登陆Github后,点击头像,进入settings
中,选择OAuth APP
并添加,设置如图:微信
关于这里两个URL
的设置咱们稍后再讨论,如今先这样填写。保存后你会获得一个Client ID
和一个Client Secret
,将它们写入配置文件:app
SOCIAL_AUTH_GITHUB_KEY = '你的ID' SOCIAL_AUTH_GITHUB_SECRET = '你的密钥'
别忘了要执行python manage.py migrate
,为了测试,咱们须要打开Django
自带的管理后台。前后端分离
选择Applications
并添加,记住这里得到的id
和secret
,等下会用到,为了在下文与Github
上的区分,把这里的称为id2
与secret2
。为了测试,让咱们进入Github
设置:curl
选择左上角的Generate new token
来建立一个测试用的token
。
如今咱们能够来测试了,运行Django
,使用命令行工具curl
测试:
$ curl -X POST -d "grant_type=convert_token&client_id=你的id2&client_secret=你的secret2&backend=github&token=测试token" http://localhost:8000/auth/convert-token // 返回的数据 {"access_token":"mNZziADXruf1ZfmVtk9m5gviAE491U","expires_in":36000,"token_type":"Bearer","scope":"read write","refresh_token":"kVt09izTo2UijhnMtb5ed3BcqE5j8h"}
接下来在前端的每次请求都使用获得的access_token
就行啦,这时候你打开管理后台也会看到新增长了一个用户,帐户名就是你的Github帐户名。另外还有关于刷新、删除Token等操做,能够去看这个库的文档,就不过多介绍了。
目前咱们只讲了如何在取得Github
的Token的状况下,向Django
后端交换Token,用来作用户验证,可是关于前端如何获取Github
的Token,以及先后端如何配合,如何共享登陆状态尚未讲,这些内容因为涉及到的知识点较多,就留到后面再介绍啦。
欢迎关注个人公众号“公子政的宅平常”,原创技术文章第一时间推送。