关灯
开启左侧

ThinkPhp5 实现token登陆

[复制链接]
哥不帅但很坏 发表于 2019-4-23 18:05:50 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 
1: 首先在数据库的 users 表中添加两个字段
1): token
2): time_outtoken 用于存储用户的 tokentime_out 用于设置用户 token 的过期时间首先创建函数: checkToekn($token)函数用于检验 token 是否存在, 并且更新 token[PHP] 纯文本查看 复制代码
[color=white !important]
[color=white !important]?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

public function checkToken($token)

{

    $user = new \app\index\model\Users();

    $res = $user->field('time_out')->where('token', $token)->select();


    if (!empty($res)) {

        //dump(time() - $res[0]['time_out']);

        if (time() - $res[0]['time_out'] > 0) {

  

            return 90003; //token长时间未使用而过期,需重新登陆

        }

        $new_time_out = time() + 604800; //604800是七天

        $res = $user->isUpdate(true)

            ->where('token', $token)

            ->update(['time_out' => $new_time_out]);

        if ($res) {

  

            return 90001; //token验证成功,time_out刷新成功,可以获取接口信息

        }

    }


    return 90002; //token错误验证失败

}





创建函数: douserLogin($username,$password)用于验证用户名密码, 并登陆, 返回 token 信息[PHP] 纯文本查看 复制代码
[color=white !important]
[color=white !important]?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

public function douserLogin()

    {

        $user = new \app\index\model\Users();

        $userisset = $user->where('username', $username)->find();

        if ($userisset == null) {

            return json_decode('{"user":"' . $username . '","code":"400","msg":"用户不存在"}');

        } else {

            $userpsisset = $user

                ->where('username', $username)

                ->where('password', sha1(md5($password)))->find();

  

            if ($userpsisset == null) {

                return json_decode('{"user":"' . $username . '","code":"401","msg":"密码错误"}');

            } else {

                //session('user', $username);

                $token = $this->makeToken();

                $time_out = strtotime("+7 days");

                $userinfo = ['time_out' => $new_time_out,

                    'token' => $token];

                $res = $user->isUpdate(true)

                    ->where('username', $username)

                    ->update($userinfo);

                if ($res) {

                    return json_decode('{"user":"' . $username . '","toekn":'.$token.' "code":"0","msg":"登录成功"}');

                }

            }

        }

    }





创建函数: makeToekn()创建 token[PHP] 纯文本查看 复制代码
[color=white !important]
[color=white !important]?

1

2

3

4

5

6

7

private function makeToken()

   {


       $str = md5(uniqid(md5(microtime(true)), true)); //生成一个不会重复的字符串

       $str = sha1($str); //加密

       return $str;

   }





   
使用的时候, 在需要验证的地方加上如下内容即可判断是否登陆[PHP] 纯文本查看 复制代码
[color=white !important]
[color=white !important]?

01

02

03

04

05

06

07

08

09

10

11

$login = new \app\index\controller\Login;

$res = $login->checkToken($token);

if($res ==90001){

echo 'ok';

}

else if($res == 90002){

echo 'err';

}

else if($res == 90003){

echo 'relogin';

}






测试结果
前台反馈


错误 token

超时 token



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


排行榜

关注我们:QQ交流群

官方微信

APP下载

全国服务热线:

4000-888-888

公司地址:上海市嘉定区

运营中心:上海市嘉定区百达国际大厦25楼

邮编:200000 Email:admin@mr-technos.com

Copyright   ©2015-2018  先森科技Powered by©Discuz!技术支持:先森科技     ( 浙ICP备18046157号-1 )|网站地图