Token学习小结

3 篇文章 0 订阅
1 篇文章 0 订阅

前言

最近一段时间研究了Django中基于token的用户验证机制,在Django的文档中,只是简单的提到可以通过token自定义用户验证系统,于是在github上找到Django-tokenapi,将它在自己的项目上进行了安装与测试,同事详细读了它的代码。

Django-tokenapi中token的加密方式

代码分析

在token的生成中,可以有不同的构成方式,在Django-tokenapi中源码如下:

    def _make_token_with_timestamp(self, user, timestamp):
        # timestamp is number of days since 2001-1-1.  Converted to
        # base 36, this gives us a 3 digit string until about 2121
        ts_b36 = int_to_base36(timestamp)

        key_salt = "tokenapi.tokens.PasswordResetTokenGenerator"

        value = (six.text_type(user.pk) + user.password + six.text_type(timestamp))
        hash = salted_hmac(key_salt, value).hexdigest()[::2]
        return "%s-%s" % (ts_b36, hash)

可以看出它在生成token的时候,用到了一些参数值,如用户pk、用户密码、时间戳等。其实在salted_hmac() 中还用到了settings.py 中的SECRET_KEY ,这个参数没有在参数列表中写出来:
user.pk :用户pk
user.password :用户密码
timestamp :时间戳,在这里其实是某设定日期到当前日期的天数
SECRET_KEY :它的值设定在settings.py 中,由于它在站点配置中设置,所以对其他人来说,生成的token值是不可预测的
key_salt :它的值在有些地方被解释为硬编码,其实就是一段固定值,看了Django’s reset password mechanism这篇文章,我暂时将它理解为在token生成时对不同应用场景的描述,它会影响生成的token值(有待研究)

token结构

这里生成的token如4my-87c88b35dad48ff02a1b ,由三部分构成,4my 是将时间通过int_to_base36(timestamp) 编码(相当于转换为36进制)后的值,能够反解出来。- 仅仅是连接线,87c88b35dad48ff02a1b 就是通过前面的参数加密后得到的值。
jwt值得一看

Token模式跟session模式的对比

Token存在cookie与local storage中的研究

Token的有效期

总结

在Transformer模型中,token是指输入序列中的每个词语或图像中的每个图像块。在NLP中,每个单词被视为一个token,并且通常还有一个特殊的token称为CLS,用于标注句子的语义。在CV中,图像被切割成不重叠的patch序列,每个patch也被视为一个token。\[1\]\[3\] 在Transformer模型中,tokenization是指将文本或图像划分为不同的token。这些token可以是单词、图像块或其他形式的输入单元。\[1\] 在Transformer模型中,embedding层用于将token转化为向量表示。这些向量表示被称为word-embedding,它们使用浮点型的稠密矩阵表示token。每个token的向量表示具有不同的维度,可以是100、256、300等等。这些向量的值是超参数,初始时是随机生成的,并在训练过程中进行学习。通过将文本或句子转化为向量表示,可以更好地表示和处理文本数据。\[1\] 在Transformer模型中,还有两个重要的概念是cls_token和Positional Encoding。cls_token是在输入序列的首位置添加的特殊token,用于对所有的token进行信息汇聚,以用于后续的分类任务。Positional Encoding用于为输入序列中的每个token添加位置信息,以帮助模型捕捉序列中的顺序关系。\[2\] 总结起来,Transformer模型中的token是指输入序列中的每个词语或图像中的每个图像块。它们经过tokenization分割,并通过embedding层转化为向量表示。在NLP中,还有一个特殊的token称为CLS,用于标注句子的语义。在CV中,图像被切割成不重叠的patch序列,每个patch也被视为一个token。同时,还有cls_token和Positional Encoding用于信息汇聚和位置编码。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [Transformer超详细整理](https://blog.csdn.net/Sakura_day/article/details/118341728)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Transformer](https://blog.csdn.net/weixin_41677138/article/details/127137986)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [transform中的token理解(单词或词语的标记)](https://blog.csdn.net/weixin_43135178/article/details/118877976)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值