Fork me on GitHub

Django使用Cookiecutter 结合阿里邮箱推送实现注册短信验证

Django使用Cookiecutter 结合阿里邮箱推送实现注册短信验证

  • 使用Cookiecutter能快速搭建模版。
  • 之所以使用阿里邮件推送因为每天可以免费发送200条。

1.准备工作:

2.网页配置:

  • 进入邮箱推送控制台,点击发信域名,并新增域名:

    这里我命名:
    	email.[你申请的域名]
    
  • 点击配置:

    以上状态在刚创建完配置为未验证。以上4项需要在域名控制台,点击解析,进行配置。

  • 域名解析设置:

    按上图进行配置,大概几分钟状态就验证通过

  • 新建发信地址:

    邮件推送控制台页面点击发信地址

    点击确定,然后点击设置SMTP密码。自行设置密码

3.代码配置:

  • 因使用Cookiecutter 相关功能代码已实现只需更改配置 ,.env中存放邮箱配置

    # 发送邮件配置
    DJANGO_EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend
    DJANGO_EMAIL_HOST=smtpdm.aliyun.com
    DJANGO_EMAIL_USE_SSL=True
    # 确保服务器防火墙打通465端口
    DJANGO_EMAIL_PORT=465
    
    DJANGO_EMAIL_HOST_USER=发信地址
    DJANGO_EMAIL_HOST_PASSWORD=你设置SMTP密码
    DJANGO_DEFAULT_FROM_EMAIL=发信地址
    

第三方账号注册和登录

  • 这里以github为例

1.网页配置

  • 登录github,点击settings,然后点击Developer settings,再点击OAuth Apps,新建应用:

  • Client IDClient Secret复制,添加数据库:

    insert into socialaccount_socialapp (id,provider,name,client_id,secret) values (1,"GitHub","GitHub",[Client ID],[Client Secret]);
    
  • 添加关联表socialaccount_socialapp_sites

    insert into socialaccount_socialapp_sites (id,socialapp_id,site_id) values (1,1,1);
    
    

2.代码配置

  • 此时在页面点击github,会跳转当前注册是否与GitHub关联,如下图:

  • 这样就可以实现第三方账号注册。然后登录

理解OAuth 2.0协议

1.简述

  • OAuth2.0是OAuth协议的延续版本,但不向前兼容OAuth 1.0,OAuth 2.0关注客户端开发者的简易性。要么通过组织在资源拥有者和HTTP服务商之间的被批准的交互动作代表用户,要么允许第三方应用代表用户获得访问的权限。百度百科

  • 上面通过我们的应用,让GitHub授权登陆其实就是用到了OAuth2.0协议,在OAuth2.0协议之前需要理解如下意思:

    Third-party application 第三方应用程序,客户端(Client),我们开发客户端
    HTTP service HTTP服务提供商,提供登陆信息的一方。
    User Agent 用户代理,浏览器
    Authorization Server 认证服务器,就是HTTP服务提供商撞门用来处理认证服务器
    Resource Server 资源服务器,即HTTP服务提供商存放用户资源服务器
    • 大概流程是:应用登录到授权层--->HTTP服务提供商,授权层有一个token(指定权限范围和有效日期),服务提供商根据token提供的范围和有效期--->向客户端开放一部分权限
  • OAuth2.0协议流程:

Resource Owner   client 是客户端
Resource Server 为HTTP服务提供者
Authorization Server 为HTTP服务提供者进行认证

# 整个过程:
	A 请求授权 ----> B 获取HTTP服务提供者的授权信息
	C 客户端使用获取授权向认证服务器申请token令牌
	D 认证服务器同意后将token令牌返回客户端
	E 客户端携带Token令牌获取资源服务器的资源
	F HTTP服务提供者将资源发送给客户端
	# 需要注意的是 C,D,E,F这都是在后端实现,我们是看不到的。
  • 当然授权模式有很多,经常使用是授权码模式

2.授权码模式工作模式:

  • 这里以我们应用访问GitHub为例:
我们访问客户端,通过输入用户名密码,点击GitHub登录,然后页面redirect到GitHub认证服务,用户输入GitHub的用户名密码来登录GitHub认证服务器。认证服务器给返回一个授权码。
授权返回url参数:
	*client ID    GitHub 生成client ID
	redirect_uri   客户端注册重定向的uri
	*response_type   模式,咱们是授权码模式,为code
	scope 可设置返回信息,如用户名,邮箱
	state   将资源原样返回
	# 注:标记"*"的表示必选项,授权码是有有效期,而且时间会很短
4.当客户端获取授权码,使用redirect_uri上的url 去 服务提供者申请Token
5.认证服务器核对授权码和uri 将会向客户端发送access Token.这只是第一次登陆时候需要,后续登陆只需要Refresh Token去更新Token
posted @ 2020-04-14 13:24  是阿凯啊  阅读(411)  评论(0编辑  收藏  举报