Django+React全栈开发:OAuth(后端部分)

OAuth

在上一篇文章中,你们应该对验证与受权有了必定的认识,可是对于一些小型网站,本身维护一个用户系统有些多余,而且每每用户也不肯意经历麻烦的流程在小网站注册一个帐户。这是很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.pygithub

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',
)

Github登陆

官方示例给了使用FacebookGoogle的示例,可是因为众所周知的缘由,这两个网站并不不存在,咱们仍是使用全球最大同性交友网站Github吧。完成上述配置后,咱们去设置Github,注册咱们的app。后端

添加app

登陆Github后,点击头像,进入settings中,选择OAuth APP并添加,设置如图:微信

OAuth APP

关于这里两个URL的设置咱们稍后再讨论,如今先这样填写。保存后你会获得一个Client ID和一个Client Secret,将它们写入配置文件:app

SOCIAL_AUTH_GITHUB_KEY = '你的ID'
SOCIAL_AUTH_GITHUB_SECRET = '你的密钥'

别忘了要执行python manage.py migrate,为了测试,咱们须要打开Django自带的管理后台。前后端分离

管理后台

选择Applications并添加,记住这里得到的idsecret,等下会用到,为了在下文与Github上的区分,把这里的称为id2secret2。为了测试,让咱们进入Github设置:curl

测试token

选择左上角的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,以及先后端如何配合,如何共享登陆状态尚未讲,这些内容因为涉及到的知识点较多,就留到后面再介绍啦。


欢迎关注个人公众号“公子政的宅平常”,原创技术文章第一时间推送。

二维码

相关文章
相关标签/搜索