前言:

  token登录上一家公司也写过,迷迷糊糊的,

  现在做一个APP,需求为每次调用接口都会传token,登录注册等特殊的除外,

  逻辑整理一下还是比较简单的

  主要的问题还是,如何在框架中找到较好的插入点,这个框架没有user/login的基类,框架结构简单到爆,找不到插入点,

  好吧,明月几时有,把酒问青天。

  写一个application 文件专门给API的模块使用,并在路由中区分API和mvc,进行不同的操作,在这里通过application 文件进行接口访问的检验,比如签名,登录、接口是否存在等验证,你说我一API,你给我返回个404页面是干嘛的啊,愁~

思路:

  1、首先用户表中添加token字段和token_time字段,token是md5()生成的32位字符串,token_time是上次刷新token的时间

  2、用户注册完可以没有token,因为接下来会自动登录一下,而且是通过用户名登录,使我们想要的味道,猥琐~ ~

  3、通过用户名密码登录的步骤:

      ⑴、通过用户名拿到用户信息$identity,并赋值给一个静态变量, 后期业务时使用

      ⑵、对比密码

      ⑶、判断token是否超过刷新时间间隔(我设置86400秒)

      ⑷、不超过直接返回当前用户的token

      ⑸、超过86400秒则刷新,md5生成新token

      ⑹、通过⑶、⑷、⑸  我们得到一个确定的token,现在将这个token以及现在的时间戳更新到用户表中的token和token_time字段

      ⑺、登录成功,将前端需要的用户信息返回

  4、通过token登录:

      ⑴、在application文件中会验证用户是否成功登录,、每个人验证的方式不同(我是验证该接口是否需要登录,需要登录则用前端传过来的token登录),有的可能是验证session'_id等,不讨论

      ⑵ 、如果访问的接口需要登录,调用一个验证方法

      ⑶、 在该方法中,先通过token查询用户,获取用户信息,并赋值给一个静态变量,返回true或者false

      ⑷、上一步返回true,则说明用户登录成功,继续接口的调用,并可以在接口中通过静态变量获取用户的ID以及其他信息。

总结:

  通过token, 用户每次调取接口的时候只需要传token, 不用传uid,我们就可以验证身份并确定uid

仅提供用户名密码登录的代码进行参考

public function login($user_name, $passwd)
{
$identity = identity::find_by_username($user_name);
if(!$identity || ($identity -> passwd !== $passwd && $identity -> passwd !== md5($passwd)))
{
return $this ->_formatreturndata(false, '账号/密码不正确');
}
unset($identity -> passwd);
//根据刷新时间间隔是否超过,获取一个token
$token = $identity -> refresh_token($identity);
//更新用户表中的token和time
$identity -> update_token($identity->id, $token);
$identity -> token = $token;
unset($identity -> refresh_time);
return $this ->_formatreturndata(true, $identity);
}

      

关于token登录逻辑分析的更多相关文章

  1. vue-router + axios token登录状态认证

    vue项目中登录状态判断往往基于jwt认证,我们可以采用判断本地是否存在token,及token是否过期或token值错误 1.利用vue-router 钩子函数判断本地是否存在token impor ...

  2. token登录验证机制

    一张图解释 token登录验证机制

  3. 前后端分离使用 Token 登录解决方案

    前后端分离使用 Token 登录解决方案:https://juejin.im/post/5b7ea1366fb9a01a0b319612

  4. python接口自动化(二十)--token登录(详解)

    简介 为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮.有些登录不是用 cookie 来验证的,是用 token 参数来判断是否登录.token 传参有两种一种是放在请 ...

  5. token登录

    ①定义 Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再 ...

  6. token登录流程

    1.token生成规则: private static $nameKey = array( 'readerid' => 0, //客户号 'ubuntu' => 1, //登录令牌 'pt ...

  7. session-cookie 和token登录验证

    最近研究了下基于token的身份验证,并将这种机制整合在个人项目中.现在很多网站的认证方式都从传统的seesion+cookie转向token校验.对比传统的校验方式,token确实有更好的扩展性与安 ...

  8. 【笔记】vue+springboot前后端分离实现token登录验证和状态保存的简单实现方案

    简单实现 token可用于登录验证和权限管理. 大致步骤分为: 前端登录,post用户名和密码到后端. 后端验证用户名和密码,若通过,生成一个token返回给前端. 前端拿到token用vuex和lo ...

  9. python测试开发django-rest-framework-60.使用token登录(authentication之TokenAuthentication)

    前言 现在很多接口项目在登录的时候返回一个token,登录后的拿着这个token去访问访问登录之后的请求. 本篇使用djangorestframework框架写一个登陆的接口,登录成功后返回token ...

随机推荐

  1. Java小工具 根据文本批量修改文件名

    功能 可以根据使用路径修改文件名,已经测试,可以成功运行 思路 先是读取到txt文本文件,之后使用String的spilt进行分割,每一行的格式为 旧名字 新名字,中间的空格可以使用|或者其他字符代替 ...

  2. Maven(十三)Maven统一声明版本号

    情景:当使用Spring下的多个包时,为了方便版本号的统一管理,避免出现因不同版本号造成的错误,必须更改为统一的版本号,但是当项目过多时手动修改不方便,因此引入此标签可以方便进行统一的修改. pom. ...

  3. webpack入门教程--1

    首先说什么是webpack:Webpack 是一个前端资源加载/打包工具.它将根据模块的依赖关系进行静态分析,然后将这些模块按照指定的规则生成对应的静态资源. 然后因为webpack有不同的版本,所以 ...

  4. input框限制只能输入正整数、字母、小数、

    这篇博文大部分来自于网上,为了方便自己查阅,以及帮助他人.   1,只能输入正整数 <input onkeyup="if(this.value.length==1){this.valu ...

  5. Web前端 页面功能——点击按钮返回顶部的实现方法

    1. 最简单的静态返回顶部,点击直接跳转页面顶部,常见于固定放置在页面底部返回顶部功能 方法一:用命名锚点击返回到顶部预设的id为top的元素 html代码 <a href="#top ...

  6. echarts图表

    <div id="main" style="width: 37.5rem;height: 25rem;"></div> <scri ...

  7. 测者的性能测试手册:JVM的监控利器

    测者的性能测试手册:JVM的监控利器 每次聊起性能测试,最后的终结话题就是怎么做优化.其实在Java的复杂项目中都会有内存不足问题.内存泄露问题.线程死锁问题.CPU问题.这些问题工程测试或者是小压力 ...

  8. PJSUA2开发文档--第五章 帐户(号)Accounts

    第五章 帐户(号) 帐户提供正在使用该应用程序的用户的身份(或身份).一个帐户有一个与之相关的SIP统一资源标识符(URI).在SIP术语中,该URI用作该人的记录地址( Address of Rec ...

  9. Ubuntu上更改MySQL数据库数据存储目录

    之前写过一篇博客"MySQL更改数据库数据存储目录",当时的测试环境是RHEL和CentOS,谁想最近在Ubuntu下面更改MySQL数据库数据存储目录时遇到了之前未遇到的问题,之 ...

  10. 【Intellij idea】spring中@Autowired注入失败

    @Autowired注入失败失败的解决办法? 现有的解决的方案是: 打开file-settings或者ctrl+alt+s -> Editor 然后在Inspections 点击搜索栏 输入Sp ...