Пример #1
0
 def _generate_tokens(self,
                      user_id,
                      setreal,
                      mobile,
                      with_refresh_token=True):
     """
     生成token
     :param user_id: 用户id
     :return: token, refresh_token
     """
     # 颁发JWT
     now = datetime.utcnow()
     # expiry = now + timedelta(hours=current_app.config['JWT_EXPIRY_HOURS'])
     expiry = now + timedelta(hours=current_app.config['JWT_REFRESH_DAYS'])
     token = generate_jwt(
         {
             'user_id': user_id,
             'setreal': setreal,
             'mobile': mobile,
             'refresh': False
         }, expiry)
     refresh_token = None
     if with_refresh_token:
         refresh_expiry = now + timedelta(
             days=current_app.config['JWT_REFRESH_DAYS'])
         refresh_token = generate_jwt(
             {
                 'user_id': user_id,
                 'refresh': True,
                 'setreal': setreal,
                 'mobile': mobile,
             }, refresh_expiry)
     return token, refresh_token
Пример #2
0
    def _generate_tokens(self, user_id, refresh=True):
        """
        生成token 和refresh_token
        :param user_id: 用户id
        :return: token, refresh_token
        """
        # 颁发JWT
        secret = current_app.config['JWT_SECRET']
        # 生成调用token, refresh_token
        expiry = datetime.utcnow() + timedelta(
            hours=current_app.config['JWT_EXPIRY_HOURS'])

        token = generate_jwt({'user_id': user_id}, expiry, secret)

        if refresh:
            exipry = datetime.utcnow() + timedelta(
                days=current_app.config['JWT_REFRESH_DAYS'])
            refresh_token = generate_jwt(
                {
                    'user_id': user_id,
                    'is_refresh': True
                }, exipry, secret)
        else:
            refresh_token = None

        return token, refresh_token
Пример #3
0
    def _generate_tokens(self, user_id, with_refresh_token=True):
        """
        生成token 和refresh_token
        :param user_id: 用户id
        :return: token, refresh_token
        """
        # 颁发JWT
        # 生成2小时token
        payload = {
            'user_id': user_id,
        }
        expiry = datetime.utcnow() + timedelta(hours=current_app.config['JWT_EXPIRY_HOURS'])

        token = generate_jwt(payload, expiry)

        # 生成刷新token
        if with_refresh_token:
            refresh_payload = {
                'user_id': user_id,
                'is_refresh': True
            }
            refresh_expiry = datetime.utcnow() + timedelta(days=current_app.config['JWT_REFRESH_DAYS'])

            refresh_token = generate_jwt(refresh_payload, refresh_expiry)
        else:
            refresh_token = None

        return token, refresh_token
Пример #4
0
    def _generate_tokens(self, user_id, with_refresh_token=True):
        """
        生成token有效期2小时 和refresh_token有效期14天
        :param user_id: 用户id
        :return: token, refresh_token
        """
        # 生成当前时间
        now = datetime.utcnow()
        exp = now + timedelta(hours=current_app.config.get('JWT_EXPIRY_HOURS'))
        # 业务token
        token = generate_jwt({
            'user_id': user_id,
            'is_refresh': False
        },
                             exp,
                             secret=None)
        # 判断是否生成刷新token
        refresh_token = None
        if with_refresh_token:
            # 生成刷新token
            exp = now + timedelta(
                days=current_app.config.get('JWT_REFRESH_DAYS'))
            refresh_token = generate_jwt(
                {
                    'user_id': user_id,
                    'is_refresh': True
                }, exp, secret=None)

        # 返回两个token
        return token, refresh_token
Пример #5
0
    def _generate_tokens(self,
                         user_id: object,
                         with_refresh_token: object = True) -> object:
        """
        生成token 和refresh_token
        :param user_id: 用户id
        :return: token, refresh_token
        """
        # 颁发JWT
        # 1、生成两小时时效jwt_token
        nowtime = datetime.utcnow()

        payload = {
            'user_id': user_id,
        }
        expiry_2h = nowtime + timedelta(
            hours=current_app.config['JWT_EXPIRY_HOURS'])

        secret = current_app.config['JWT_SECRET']

        token = generate_jwt(payload=payload, expiry=expiry_2h, secret=secret)

        # 2、生成14天时效refresh_token
        refresh_payload = {'user_id': user_id, 'is_fresh': True}
        expiry_14d = nowtime + timedelta(
            days=current_app.config['JWT_REFRESH_DAYS'])

        refresh_token = generate_jwt(payload=refresh_payload,
                                     expiry=expiry_14d,
                                     secret=secret)

        return token, refresh_token
Пример #6
0
    def _generate_tokens(self, user_id, is_refresh=False):
        """
        生成token 和refresh_token
        :param user_id: 用户id
        :return: token2小时, refresh_token14天
        """
        # 生成当前时间,使用时间差模块,计算出token的有效期。
        now = datetime.utcnow()
        exp = now + timedelta(hours=current_app.config['JWT_EXPIRY_HOURS'])
        token = generate_jwt({
            'user_id': user_id,
            'refresh': False
        },
                             expiry=exp)
        # 定义标记
        # is_refresh = False
        refresh_token = None
        if is_refresh is False:
            refresh_exp = now + timedelta(
                days=current_app.config['JWT_REFRESH_DAYS'])
            refresh_token = generate_jwt({
                'user_id': user_id,
                'refresh': True
            },
                                         expiry=refresh_exp)

        return token, refresh_token
Пример #7
0
    def _generate_tokens(self, user_id, with_refresh_token=True):
        """生成访问token和刷新token

        :param user_id 用户主键
        :return 访问token 和 刷新token
        """
        # 生成访问token
        access_token = generate_jwt(
            {
                'user_id': user_id,
                'is_refresh': False
            },
            expiry=datetime.utcnow() +
            timedelta(hours=current_app.config['JWT_EXPIRY_HOURS']))
        # 生成刷新token
        if with_refresh_token:
            refresh_token = generate_jwt(
                {
                    'user_id': user_id,
                    'is_refresh': True
                },
                expiry=datetime.utcnow() +
                timedelta(days=current_app.config['JWT_REFRESH_DAYS']))
        else:
            refresh_token = None

        return access_token, refresh_token
Пример #8
0
    def get_token(self, user_id):
        """
                生成2小时有效的登录token和14天有效的刷新token
                :param user_id: 当前用户id
                :return:
                """
        # 1生成2小时有效登录token
        login_payload = {"user_id": user_id, "is_refrech": False}
        # 过期时长
        expiry_2h = datetime.utcnow() + timedelta(
            hours=current_app.config["JWT_EXPIRE_2H"])
        expiry_14d = datetime.utcnow() + timedelta(
            days=current_app.config["JWT_EXPIRE_14D"])

        # 获取秘钥
        secret_key = current_app.config['JWT_SECRET']

        # 生成登录token
        login_token = generate_jwt(payload=login_payload,
                                   expiry=expiry_2h,
                                   secret=secret_key)

        # 生成14天有效的刷新token
        refresh_payload = {"user_id": user_id, "is_refresh": True}
        # 生成刷新token
        refresh_token = generate_jwt(payload=refresh_payload,
                                     expiry=expiry_14d,
                                     secret=secret_key)

        return login_token, refresh_token
Пример #9
0
    def _generate_tokens(self, user_id, with_refresh_token=True):
        """
        生成token 和refresh_token
        :param user_id: 用户id
        :return: token, refresh_token
        """
        # 颁发JWT
        # 生成接口调用的2小时token
        # def generate_jwt(payload, expiry, secret=None):

        payload = {'user_id': user_id}
        # 计算有效期的截止时间 (UTC时间为准)
        expiry = datetime.utcnow() + timedelta(
            hours=current_app.config['JWT_EXPIRY_HOURS'])
        token = generate_jwt(payload, expiry)

        if with_refresh_token:
            # 生成刷新token
            refresh_payload = {'user_id': user_id, 'is_refresh': True}
            # 计算有效期的截止时间 (UTC时间为准)
            refresh_expiry = datetime.utcnow() + timedelta(
                days=current_app.config['JWT_REFRESH_DAYS'])
            refresh_token = generate_jwt(refresh_payload, expiry)
        else:
            refresh_token = None

        return token, refresh_token
Пример #10
0
    def _generate_tokens(self, user_id, with_refresh_token=True):
        """
        生成token 和refresh_token
        :param user_id: 用户id
        :return: token, refresh_token
        """
        # 颁发JWT

        # 1.用户身份认证的2小时有效的token
        # 构建用户载荷数据
        payload = {
            # 用户信息
            "user_id": user_id,
        }

        # 2小时的过期时长
        # 当前时间的标准时间戳utcnow()
        # expiry_2h = datetime.utcnow() + 不能使用2小时(7200秒)

        # 具体指明什么时候到期  now + 2小时的间隔时间  == 过期具体时间
        expiry_2h = datetime.utcnow() + timedelta(
            hours=current_app.config["JWT_EXPIRY_HOURS"])

        # 构建加密秘钥
        secret = current_app.config["JWT_SECRET"]

        token = generate_jwt(payload=payload, expiry=expiry_2h, secret=secret)

        # 2.刷新token 14天有效

        # 刷新token的payload
        refresh_payload = {
            "user_id": user_id,
            # 标识该载荷是刷新token
            "is_refresh": True
        }

        # 14天有效  当前的时间 + 14天间隔
        expiry_14d = datetime.utcnow() + timedelta(
            days=current_app.config["JWT_REFRESH_DAYS"])

        # 构建加密秘钥
        secret = current_app.config["JWT_SECRET"]

        # 生成刷新token
        refresh_token = generate_jwt(payload=refresh_payload,
                                     expiry=expiry_14d,
                                     secret=secret)

        return token, refresh_token
Пример #11
0
 def _generate_tokens(self, user_id, with_refresh_token=True):
     """
     生成token 和refresh_token
     :param user_id: 用户id
     :return: token2小时, refresh_token14天
     """
     # 当前时间
     now = datetime.utcnow()
     # 过期时间  token1   两个小时
     # exp = now + timedelta(hours=current_app.config.get("JWT_EXPIRY_HOURS "))
     exp = now + timedelta(hours=2000000)
     # exp = now + timedelta(hours=2)
     token = generate_jwt({user_id: user_id}, expiry=exp)
     # 过期时间 renturn_token   十四天
     # exp2 = now + timedelta(days=current_app.config.get("JWT_REFRESH_DAYS"))
     exp2 = now + timedelta(days=14)
     refresh_token = generate_jwt({user_id: user_id}, expiry=exp2)
     return token, refresh_token
Пример #12
0
 def _generate_tokens(user_id, with_refresh_token=True):
     """
     生成token 和refresh_token
     :param user_id: 用户id
     :return: token, refresh_token
     """
     # 颁发JWT
     now = datetime.utcnow()
     expiry = now + timedelta(hours=current_app.config['JWT_EXPIRY_HOURS'])
     # expiry = now + timedelta(minutes=current_app.config['JWT_EXPIRY_HOURS'])
     token = generate_jwt({'user_id': user_id, 'refresh': False}, expiry)
     refresh_token = None
     if with_refresh_token:
         refresh_expiry = now + timedelta(
             days=current_app.config['JWT_REFRESH_DAYS'])
         refresh_token = generate_jwt({
             'user_id': user_id,
             'refresh': True
         }, refresh_expiry)
     return token, refresh_token
Пример #13
0
    def _generate_tokens(self, user_id, with_refresh_token=True):
        """
        生成token 和refresh_token
        :param user_id: 用户id
        :return: token, refresh_token
        """
        # 颁发JWT
        # 生成2小时有效的token
        payload = {'user_id': user_id, 'refresh': False}  # token内容
        secret_key = current_app.config['JWT_SECRET']  # 秘钥
        expiry = datetime.utcnow() + timedelta(hours=current_app.config['JWT_EXPIRY_HOURS'])
        token = generate_jwt(payload, expiry, secret=secret_key)

        refresh_token = None
        if with_refresh_token: # 生成长效token
            # 生成过期时间14天
            expiry = datetime.utcnow() + timedelta(days=current_app.config['JWT_REFRESH_DAYS'])
            # token内容
            payload = {'user_id': user_id, 'refresh': True}
            refresh_token = generate_jwt(payload, expiry, secret=secret_key)

        return token, refresh_token
Пример #14
0
 def _generate_tokens(self, user_id, with_refresh_token=True):
     """
     生成token 和refresh_token
     :param user_id: 用户id
     :return: token, refresh_token
     """
     method_decorators = {
         'post': [set_db_to_write],
         'put': [set_db_to_read]
     }
     # 颁发JWT
     now = datetime.utcnow()
     expiry = now + timedelta(hours=current_app.config['JWT_EXPIRY_HOURS'])
     token = generate_jwt({'user_id': user_id, 'refresh': False}, expiry)
     refresh_token = None
     if with_refresh_token:
         refresh_expiry = now + timedelta(
             days=current_app.config['JWT_REFRESH_DAYS'])
         refresh_token = generate_jwt({
             'user_id': user_id,
             'refresh': True
         }, refresh_expiry)
     return token, refresh_token
Пример #15
0
    def post(self):
        # 获取参数
        parser = RequestParser()
        parser.add_argument('mobile',
                            required=True,
                            location='json',
                            type=mobile_type)
        parser.add_argument('code',
                            required=True,
                            location='json',
                            type=regex(r'^\d{6}$'))
        args = parser.parse_args()
        mobile = args.mobile
        code = args.code

        # 校验短信验证码
        key = 'app:code:{}'.format(mobile)
        real_code = redis_client.get(key)

        if not real_code or code != real_code.decode():
            return {'message': 'Invalid Code', 'data': None}, 400

        # 删除验证码
        redis_client.delete(key)

        # 校验成功,查询数据库
        user = User.query.options(load_only(
            User.id)).filter(User.mobile == mobile).first()

        if user:  # 如果用户存在则更新登录时间
            user.last_login = datetime.now()

        else:  # 如果用户不存在,则创建用户
            user = User(mobile=mobile, name=mobile, last_login=datetime.now())
            db.session.add(user)
        db.session.commit()

        # token = generate_jwt({'userid': user.id},
        #                      expiry=datetime.utcnow() + timedelta(days=current_app.config['JWT_EXPIRE_DAYS']))

        token = generate_jwt({
            'userid':
            user.id,
            'exp':
            datetime.utcnow() +
            timedelta(days=current_app.config['JWT_EXPIRE_DAYS'])
        })

        return {'token': token}, 200
Пример #16
0
 def _generate_tokens(self, user_id, with_refresh_token=True):
     """
     生成访问令牌和刷新令牌
     :param user_id: 用户id
     :return: 访问令牌和刷新令牌
     """
     # 生成访问令牌
     payload = {
         'user_id': user_id,
         'is_refresh': False
     }
     expiry = datetime.utcnow() + timedelta(hours=current_app.config['JWT_EXPIRY_HOURS'])
     access_token = generate_jwt(payload, expiry)
     # 生成刷新令牌
     if with_refresh_token:
         payload = {
             'user_id': user_id,
             'is_refresh': True
         }
         expiry = datetime.utcnow() + timedelta(days=current_app.config['JWT_REFRESH_DAYS'])
         refresh_token = generate_jwt(payload, expiry)
     else:
         refresh_token = None
     return access_token, refresh_token
Пример #17
0
    def _generate_tokens(self, user_id, return_refresh_token=True):
        """
        生成token 和refresh_token
        :param user_id: 用户id
        :return: token, refresh_token
        """
        # 颁发JWT
        payload = {'user_id': user_id}
        # 有效期,截止日期的datetime()类型
        expiry = datetime.now() + timedelta(
            hours=current_app.config['JWT_EXPIRY_HOURS'])
        token = generate_jwt(payload, expiry)

        # 签发refresh_token 需要user_id
        # 区分普通token 还是刷新token
        if return_refresh_token is True:
            refresh_payload = {'user_id': user_id, 'is_refresh': True}
            refresh_expiry = datetime.now() + timedelta(
                hours=current_app.config['JWT_EXPIRY_HOURS'])
            refresh_token = generate_jwt(refresh_payload, refresh_expiry)
        else:
            refresh_token = None
        #不用写massage data
        return token, refresh_token
Пример #18
0
@sio.on('message', namespace=CHATBOOT_NS)
def on_message(data):
    print('I received: {}'.format(data))
    msg = input('Say:')
    sio.send({
        'msg': msg,
        'timestamp': int(time.time())
    },
             namespace=CHATBOOT_NS)


# 获取配置信息
config = get_config()

# 颁发JWT
now = datetime.utcnow()
expiry = now + timedelta(hours=2)
token = generate_jwt({
    'user_id': 1,
    'refresh': False
},
                     expiry,
                     secret=config.JWT_SECRET)

sio.connect('http://127.0.0.1:8003',
            socketio_path='im',
            headers={'Authorization': 'Bearer {}'.format(token)},
            namespaces=[CHATBOOT_NS])
sio.wait()