您现在的位置是:首页 > 恋爱课程恋爱课程
要认证单位的社交软件 记一个社交APP的开发过程——用户身份认证与在线标记
2021-06-04 16:05:52恋爱课程人已围观
简介要认证单位的社交软件 记一个社交APP的开发过程——用户身份认证与在线标记服务端怎么去把这个跟具体哪个用户对应起来?是一个集合,里面包含那些不需要就可以使用的功能,比如注册、登录,另外web.用户在线标记一下得到的用户id就是在线用户了。为了节约内存的使用,我这里没有使用的set,而是使用了的去做标记,每个bit代表一个用户,bit的索引是用户的id,bit值为0的时候说明用户不在线,bit值为1的时候说明用户在线。比如我要得到我的在线好友列表?
要认证单位的社交软件 记一个社交APP的开发过程——用户身份认证与在线标记
记住社交应用-用户身份验证和在线标记的开发过程
网站可以自动登录,通常是因为有一个值可以记录。然后验证在拦截 Web 应用程序中的请求的过滤器中读取的值。另外这个会有一个过期时间,一周或者一个月或者用户自己手动选择,但是现在越来越多的网站好像不再设置这个过期时间了,一直有效。从产品的角度来看,确实方便了用户,但是从安全的角度来看,也存在一定的隐患,大多在安全性提高的情况下,会失去一些产品的便利性,反之亦然。
对于移动应用程序,否。一般情况下,服务器在登录时会返回一个给客户端。对于后续的每次请求,客户端都必须将请求的URL作为参数传递给服务器。识别身份,例如 GET /api/v1/?=,对于移动应用要认证单位的社交软件,这通常不会过期,除非用户手动退出应用。
服务器如何将其与特定用户相关联?通常有两种方式。一种是通过可逆的加密算法和密钥对用户ID、创建时间等所有用户信息进行加密,并将加密后的字符串传递给客户端。当客户端发送字符串时,通过key来解锁活动相关的用户信息;第二种方法是根据用户的独特特征添加一些随机干扰生成不可逆的hash,然后服务器会保存用户ID到这个hash的映射关系,比如这样的表结构:
CREATE TABLE `user_token` (
`token` varchar(32) NOT NULL,
`user_id` int(11) NOT NULL,
`created_on` datetime NOT NULL,
PRIMARY KEY (`token`),
UNIQUE (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
一是为了安全(全局key太危险),二是为了更好的控制发布。我这里选择了第二种实现方式,但是第二种方式最大的问题是每次验证用户身份都要读取库。所以在前面加一个,缓存过期时间为1天。先去图书馆看看。如果没有,那就去图书馆看看。这些逻辑都在一个web.py中进行,代码如下:
def checktoken(handler, *args):
if web.ctx.path in _no_token_urls:
return handler(*args)
token = form(True, 'token')
user_id = check_token(token) if token else None
if user_id:
mark_online(user_id)
web.ctx.user_id, web.ctx.token = user_id, token
return handler(*args)
else:
return output_json({"status":"ERROR",
"error":{"code":"invalid token"}, "result":{}})
是一个集合,里面包含了注册、登录等不需要就可以使用的功能。另外,web.py 提供了一个非常强大的工具叫做 web.ctx,它是一个参数,它记录了请求线程的上下文。它们之间不会有任何干扰,获得的用户ID可以放在web.ctx中,供后续逻辑使用。
用户在线标记
对于基于Http的应用来说,标记哪些用户在线,哪些用户不在线可能根本不是问题,但是对于这个基于Http的无状态应用来说,标记是否在线需要一些波折。幸运的是, 和 有很多资源,我参考了一些文章。比如我没写多少代码就解决了这个问题。
总体思路是一样的。指定用户活动时间段,例如 5 分钟。如果用户在 5min 内没有任何活动(请求),那么即使他不在线,也将每分钟的活跃用户保存到一个集合中要认证单位的社交软件,例如 Set,在获取在线用户时,从该集合中获取的用户 id最后 5 分钟是在线用户。
为了节省内存的使用要认证单位的社交软件,我这里没有使用set,而是用它来做标记。每一位代表一个用户。该位的索引是用户的 id。当位值为0时,用户不在线。 ,当该位值为1时,表示用户在线。
def mark_online(user_id):
now = int(time.time())
expires = now + (_MAX_ACTIVE_TIME * 60) + 10
user_online_key = rds.keys.user_online.key(now // 60)
p = rds.default.pipeline()
p.setbit(user_online_key, user_id, 1)
p.expireat(user_online_key, expires)
p.execute()
API 的操作非常友好。您可以使用该操作直接设置某个位的值,0或1,也就是我们指定的活动时间段,5min。每次调用web.py中也有这个函数。
那么如何获取数据呢?例如,我想获取我的在线好友列表?
def query_online(*user_id_list):
current = int(time.time()) // 60
minutes = xrange(_MAX_ACTIVE_TIME)
keys = [rds.keys.user_online.key(current - x)
for x in minutes]
online_data_lst = rds.default.mget(*keys)
online_users = set()
for online_data in online_data_lst:
if not online_data:
continue
a = bitarray()
a.frombytes(online_data)
a_len = len(a)
online_users.update({user_id
for user_id in user_id_list if user_id < a_len and a[user_id]})
return online_users
首先通过列表表达式生成最后5分钟的key列表,然后mget从中获取它们的值。这里要处理二进制位,需要将数据结构转换成数据结构,并且要达到同样的效率和紧凑,我找了一个很好的库调用,并转换为。剩下的就容易多了。只需取对应索引的值就可以知道最近5分钟有哪些用户活跃(在线)
Tags:要认证单位的社交软件
上一篇:全球节点社交
相关文章
随机图文
-
浪迹教育聊天话术《撩妹聊天全能话术惯例》PDF电子书
浪迹教育聊天话术《撩妹聊天全能话术惯例》教程介绍:本期给大家分享一个撩妹聊天话术惯例电子书,很多兄弟都知道如何正确聊天和回答女生的问题,本次电子书能够解决你大多数聊天 -
坏男孩学院泰勒《热座》2023整合版百度网盘下载
本期恋爱课程是坏男孩学院泰勒《热座》2023整合版!网站课程均有备份,若是课程内容失效,可联系我们课程重新上传!课程均保存在百度网盘,下载地址在页面底部!课程目录:01第一周 核 -
舞步学院舞步情感阿龙《龙门弟子》完整版
舞步学院舞步情感阿龙《龙门弟子》本期课程是舞步学院舞步情感的龙门弟子课程,全部课程均为内部实战VIP教学课程,课程中,会教你如何聊天,以及舞步情感导师原创的病毒式聊天法。 -
小鹿情感恋爱秘籍:追女生必看恋爱模型图
小鹿情感恋爱秘籍:追女生必看恋爱模型图教程介绍:本期是一套基础的最女生模型图,通过这些模型图,你可以知道自己当前追女生所在的阶段,同时能够掌握各种追女生的模型以及聊天技巧