Пример #1
0
    def login_by_wx_ticket(self):
        """微信扫描二维码登录"""
        scene_id = self.args['scene_id']

        wx_userinfo = pf_redis.get('pf_scene_openid:%s' % scene_id)
        if not wx_userinfo:
            return self.send_success(done=False)
        wx_userinfo = json.loads(wx_userinfo.decode())

        if len(str(scene_id)) == 9:
            success, user_or_msg = AuthFunc.login_by_wx(
                self.session, wx_userinfo)
            if not success:
                return self.send_fail(user_or_msg)

            user = user_or_msg
            self.set_current_user(user)
        else:
            return self.send_fail("scene_id 无效")

        pf_redis.delete('pf_scene_openid:%s' % scene_id)

        # 更新微信信息
        AuthFunc.update_through_wx(self.session,
                                   wx_userinfo,
                                   user,
                                   action="bind")
        # 手机绑定状态
        phone_bind = bool(user.phone)
        return self.send_success(done=True, phone_bind=phone_bind)
Пример #2
0
    def post(self):
        """
            前端wx.getUserInfo方法返回的用户信息:
                {
                    user_info:用户信息对象,不包含 openid 等敏感信息
                    rawData:不包括敏感信息的原始数据字符串,用于计算签名
                    signature:使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息
                    encryptedData:包括敏感数据在内的完整用户信息的加密数据(包含unionid)
                    iv:加密算法的初始向量
                }

            source: 登录请求的来源 "purchase"-采购助手 "demand"-订货助手
        """
        if self.current_user:
            return self.send_fail("无需重复登录")

        from handlers.applet import ResolveData
        res_status, res_content = ResolveData().resolve(self.args)
        if not res_status:
            return self.send_fail(res_content)
        user_info = res_content

        success, user_or_msg = AuthFunc.login_by_wx(self.session, user_info)
        if not success:
            return self.send_fail(user_or_msg)
        AuthFunc.update_through_wx(self.session,
                                   user_info,
                                   user_or_msg,
                                   action="bind")

        user = user_or_msg
        self.set_current_user(user)

        # 设置当前中转站
        station = self.session.query(models.TransferStation) \
            .join(models.Staff, models.Staff.station_id == models.TransferStation.id) \
            .filter(models.TransferStation.status == 0,
                    models.Staff.status == 0,
                    models.Staff.account_id == user.id,
                    models.Staff.purchaser_status == 1) \
            .first()
        if station:
            self.set_current_station_cookie(station.id,
                                            domain=self._ARG_DEFAULT)

        # #缓存session_key
        # redis_name = "session_key:%s:%d"%(appid,customer_id)
        # redis_session.set(redis_name,session_key,7*24*60*60)
        phone_bind = bool(user.phone)
        return self.send_success(phone_bind=phone_bind)
Пример #3
0
    def post(self):
        code = self.args["code"]

        wx_userinfo = WxOauth2.get_userinfo(code, mode="")
        if not wx_userinfo:
            return self.send_error(401)

        success, user_or_msg = AuthFunc.login_by_wx(self.session, wx_userinfo)
        if not success:
            return self.send_error(403, error_msg=user_or_msg)
        user = user_or_msg

        self.set_current_user(user_or_msg)

        # 更新微信信息
        AuthFunc.update_through_wx(self.session,
                                   wx_userinfo,
                                   user,
                                   action="bind")
        # 手机绑定状态
        phone_bind = bool(user.phone)
        return self.send_success(phone_bind=phone_bind)