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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
@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()