当前位置: 首页 > 后端技术 > Python

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

时间:2023-03-25 21:53:38 Python

OAuth上一篇文章,大家应该对认证授权有了一定的了解,但是对于一些小网站来说,自己维护一个用户系统是多余的。而用户往往不愿意经历在小网站上注册账号的繁琐过程。这对OAuth非常有用。现在很多网站都会有QQ登录、微信登录等,非常方便,但是对于前后端分离的项目,使用OAuth会和传统流程有些区别。这篇文章HowtoIntegratedOAuth2IntoYourDjango/DRFBack-endWithoutGoingInsane非常详细,我建议你看看。使用DjangoRESTframework的第三方库,已经有人为我们打包了一个非常好用的库,可以通过pip下载:$pipinstalldjango-rest-framework-social-oauth2不要忘记激活安装前的虚拟环境,安装后打开backend/settings.py文件,注册应用:INSTALLED_APPS=(#...'oauth2_provider','social_django','rest_framework_social_oauth2',)修改backend/urls。py同时:urlpatterns=[#...path('auth/',include('rest_framework_social_oauth2.urls')),]其他配置: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_oauthation.authentication,}Authentication'AUTHENTICATION_BACKENDS=('social_core.backends.github.GithubOAuth2','rest_framework_social_oauth2.backends.DjangoOAuth2','django.contrib.auth.backends.ModelBackend',)Github登录官方例子给出了使用Facebook和Google的例子,但是由于众所周知的原因,这两个网站不存在,我们还是在使用了全球最大的同性交友网站Github之后,为了完成上面的配置,我们来设置Github,注册我们的app。登录Github后,点击头像,进入设置,选择OAuthAPP并添加,如图设置:两个url的设置我们后面再讨论,填成这样现在。保存后,你会得到一个ClientID和一个ClientSecret,将它们写入配置文件:SOCIAL_AUTH_GITHUB_KEY='你的ID'SOCIAL_AUTH_GITHUB_SECRET='你的秘密'不要忘记执行pythonmanage.pymigrate,为了测试,我们你需要打开Django自带的管理后台。选择应用程序并添加。记住这里获取的id和secret,后面会用到。下面为了和Github区别,分别叫做id2和secret2。为了测试,让我们进入Github设置:选择左上角的生成新令牌以创建用于测试的令牌。现在我们可以测试了,运行Django,使用命令行工具curl进行测试:$curl-XPOST-d"grant_type=convert_token&client_id=yourid2&client_secret=yoursecret2&backend=github&token=testtoken"http://localhost:8000/auth/convert-token//返回的数据接下来就可以使用前端每次请求获取到的access_token了。这时候你打开管理后台就会看到新增了一个用户。账户名就是你的Github账户名。此外,还有刷新、删除Token等操作。这个库的文档大家可以看看,就不多介绍了。前端部分,我们只讲了获取GithubToken后,如何与Django后端交换Tokens进行用户认证。我没有谈论它。由于这些内容涉及到的知识点比较多,所以先存起来留到后面再介绍。欢迎关注我的公众号《公子正的日常》,原创技术文章第一时间推送。