前言:

  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. MySQL 笔记整理(8.b) --事务到底是隔离还是不隔离的?

    笔记记录自林晓斌(丁奇)老师的<MySQL实战45讲> (本篇内图片均来自丁奇老师的讲解,如有侵权,请联系我删除) 8.a) --事务到底是隔离还是不隔离的? 本周工作较忙,加上懒惰,拖更 ...

  2. WebLogic及其他

    如何给WebLogic指定大小的内存? 在启动WebLogic的脚本中(位于所在Domian对应服务器目录下的startServerName),增加set MEM_ARGS= -Xms32m -Xmx ...

  3. MVC架构中的Repository模式 个人理解

    关于MVC架构中的Repository模式   个人理解:Repository是一个独立的层,介于领域层与数据映射层(数据访问层)之间.它的存在让领域层感觉不到数据访问层的存在,它提供一个类似集合的接 ...

  4. [PHP]命令执行函数的区别

    <?php $cmd="ps aux|grep php-fpm"; $res=exec($cmd,$o); var_dump($o);//数组形式返回,每行一个元素 var_ ...

  5. TJU ACM-ICPC Online Judge—1191 The Worm Turns

    B - The Worm Turns Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Su ...

  6. Spring框架基础(中)

    Spring对不同持久化技术进行支持 JDBC 导入spring-jdbc-4.3.5.RELEASE.jar.spring-tx-4.3.5.RELEASE.jar 创建对象,设置数据库信息 创建j ...

  7. (一)MYSQL ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.10.210' (111) 解决方法

    今天在测试MySQL的连接时候,发现连接不通过,并报错ERROR 2003 (HY000): Can't connect to mysql server on '192.168.10.210' (11 ...

  8. centos服务器如何监控访问ip,并将非法ip通过防火墙禁用

    centos服务器如何监控访问ip,并将非法ip通过防火墙禁用 上周给朋友帮忙,上架了一款小游戏(年年有鱼),项目刚一上线,就遇到了ddos攻击,阿里云连续给出了6次ddos预警提示,服务器一度处于黑 ...

  9. 转摘app-稳定性测试

    稳定性测试的概念有2种, 一, 稳定性测试,对应于异常性测试,即发生异常情况时,系统如何反应的测试.包含: 1 交互性测试,被打扰的情况,如来电,短信,低电量等.这些其实在上章的功能测试中有提到. 2 ...

  10. .net DLL版本管理

    每个DLL打上版本号,方便识别维护