前言:

  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. php设计模式--简单介绍

    鉴于最近有几个小伙伴总问一些设计模式相关的东西,本人借鉴了一些东西,准备将常见的几种php的设计模式总结整理出来. 平时我们用到的设计模式很多,建议大家多多读一些php开源框架,当深入的阅读了一些ph ...

  2. Sublime 无法安装插件的解决办法

    1,打开命令面板 Ctrl + Shift + P  输入:pi  回车 按回车后,出现异常如下图: 解决办法: 1,点击Preferences----Brows Packages ---会到安装目录 ...

  3. Netty学习笔记(五) 使用Netty构建静态网页服务器

    昨天在继续完善基于Netty构建的聊天室系统的过程中,发现了一个有意思的知识点,特此拿来做一个简单的静态网页服务器,好好的玩一玩Netty. 但是不管怎么说利用netty实现各种功能的流程都是类似的 ...

  4. Docker 镜像编排并部署SpringBoot应用

    Docker-compose是一个基于Docker的编排工具,所谓编排个人理解就是将不同的镜像通过配置,组成一个新的运行环境,官方定义是:Compose is a tool for defining ...

  5. JVM内存管理 《深入分析java web 技术内幕》第八章

    8.1 物理内存与虚拟内存 物理内存RAM(随机存储器),寄存单元为寄存器,用于存储计算单元执行指令的中间结果. 连接处理器和RAM或者处理器和寄存器的是地址总线,这个地址的宽度影响了物理地址的索引范 ...

  6. 监控 redis 执行命令

    监控 redis 执行命令 Intro 最近在用 redis 的时候想看看执行了哪些命令,于是发现了 redis-cli 提供的 Monitor 命令,直接使用这个就可以监控执行的大部分 redis ...

  7. Edge BUG欣赏之四摸鸡与IP地址的恩怨

    <html><head>     <meta http-equiv="Content-Type" content="text/html; c ...

  8. vulnhub writeup - 持续更新

    目录 wakanda: 1 0. Description 1. flag1.txt 2. flag2.txt 3. flag3.txt Finished Tips Basic Pentesting: ...

  9. Class.isAssignableFrom与instanceof的区别

    isAssignableFrom 假设有两个类Class1和Class2.Class1.isAssignableFrom(Class2)表示: 类Class1和Class2是否相同. Class1是否 ...

  10. Django--session(登录用)

    一.session的原理图 二.Django中session对象的设置/读取/删除及其他方法 三. Django--配置 settings.py中与session有关的参数 一.session的原理图 ...