关于token登录逻辑分析

前言:

  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、通过用户名密码登录的步骤:

扫描二维码关注公众号,回复: 5609438 查看本文章

      ⑴、通过用户名拿到用户信息$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);
    }

 

      

猜你喜欢

转载自www.cnblogs.com/lz0925/p/10573799.html
今日推荐