DjangoQQ登录之openid绑定用户实现

类似于用户注册的业务逻辑

  • 当用户输入的手机号对应的用户已存在
    直接将该已存在用户跟openid绑定
  • 当用户输入的手机号对应的用户不存在
    新建一个用户,并跟openid绑定
class QQAuthUserView(View):
    """用户扫码登录的回调处理"""
    def get(self, request):
        """Oauth2.0认证"""
        ......
    def post(self, request):
        """美多商城用户绑定到openid"""
        # 接收参数
        mobile = request.POST.get('mobile')
        pwd = request.POST.get('password')
        sms_code_client = request.POST.get('sms_code')
        access_token = request.POST.get('access_token')
        # 校验参数
  
        # 判断短信验证码是否一致
        redis_conn = get_redis_connection('verify_code')
        sms_code_server = redis_conn.get('sms_%s' % mobile)
        if sms_code_server is None:
            return render(request, 'oauth_callback.html', {'sms_code_errmsg':'无效的短信验证码'})
        if sms_code_client != sms_code_server.decode():
            return render(request, 'oauth_callback.html', {'sms_code_errmsg': '输入短信验证码有误'})
        # 判断openid是否有效:错误提示放在sms_code_errmsg位置
        openid = check_access_token(access_token)
        if not openid:
            return render(request, 'oauth_callback.html', {'openid_errmsg': '无效的openid'})
        # 保存注册数据
        try:
            user = User.objects.get(mobile=mobile)
        except User.DoesNotExist:
            # 用户不存在,新建用户
            user = User.objects.create_user(username=mobile, password=pwd, mobile=mobile)
        else:
            # 如果用户存在,检查用户密码
            if not user.check_password(pwd):
                return render(request, 'oauth_callback.html', {'account_errmsg': '用户名或密码错误'})
        # 将用户绑定openid
        try:
            OAuthQQUser.objects.create(openid=openid, user=user)
        except DatabaseError:
            return render(request, 'oauth_callback.html', {'qq_login_errmsg': 'QQ登录失败'})
        # 实现状态保持
        login(request, user)
        # 响应绑定结果
        next = request.GET.get('state')
        response = redirect(next)
        # 登录时用户名写入到cookie,有效期15天
        response.set_cookie('username', user.username, max_age=3600 * 24 * 15)
        return response
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现Hexo多用户登录,可以使用OpenID进行身份验证。OpenID是一种开放式身份验证协议,使用户可以使用一个帐户登录多个网站,而无需为每个网站创建不同的帐户。 以下是实现Hexo多用户登录的步骤: 1. 在Hexo博客中安装OpenID插件。可以使用hexo-openid或hexo-authentication等插件。 2. 注册OpenID提供商,例如Google、Facebook或GitHub。在OpenID提供商网站上创建一个应用程序,并获取客户端ID和客户端密钥。 3. 在Hexo博客中配置OpenID插件。将客户端ID和客户端密钥添加到Hexo配置文件中,并指OpenID提供商的授权网址和令牌网址。 4. 在Hexo博客中创建多个用户帐户。可以使用Hexo管理员帐户创建多个用户帐户,或者使用第三方用户管理插件。 5. 在Hexo博客中启用OpenID登录。将OpenID登录选项添加到Hexo主题的登录页面,并将登录请求发送到OpenID提供商。 6. 在OpenID提供商中授权登录用户将被重向到OpenID提供商的授权页面,以授权Hexo博客访问其个人信息。 7. 在Hexo博客中验证用户身份。一旦用户授权登录OpenID提供商将向Hexo博客发送令牌。Hexo插件将验证令牌,并将用户身份存储在本地数据库中。 8. 在Hexo博客中显示用户信息。一旦用户登录成功,Hexo主题将显示用户信息,并提供特用户的功能和权限。 通过使用OpenID实现Hexo多用户登录,可以提高博客的安全性和用户友好性,同时使用户可以方便地在多个网站之间共享身份验证信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值