2
制作自己的composer包
蔡关荣
2019年5月20日
Linux
php linux
那这个 Token 是个什么样的呢? RFC 并没有明确规定; 不过业内比较常见的方案是使用 JWT ; JWT 是 JSON Web Token 的缩写; 要学习 JWT 我们可以拿 session 作为参照物; 在传统开发中我们在用户登录后会创建一个 session 文件 xxx ; 用户的 id 等信息就存储在 xxx 文件中; 接着会在 Set-Cookie 中返回 xxx 作为 session_id ; 以后前端请求的时候就会在 cookie 中携带 xxx ; 服务器端根据 xxx 从文件中读取用户信息; 从上面的流程我们可以看出要验证一个用户需要有两步; 传递 session 文件名 根据文件名从文件中获取用户信息 那我们可不可以不传文件名; 服务器端直接返回用户信息组成的认证字符串; 以后前端就把认证字符串发送给服务器端; 服务器端从认证字符串中获取用户信息; 这样只需要一步就可以验证用户; 不需要 session 文件的参与了; 但是这里面有两个问题需要解决; 怎么用字符串保存用户信息 如何防止篡改即服务器端如何信任前端发送的用户信息字符串是真实有效的; 既然本文的标题是 JWT ; 那是时候开始 JWT 的表演了; 下面就有请 JWT 来解决上面的问题; JWT 定义这个认证字符串为三段; Header(头部) . Payload(负载) . Signature(签名) ; Header 头部是一个 JSON ;

  "<?php

    namespace app\index\controller;

    use Lcobucci\JWT\Builder;
    use Lcobucci\JWT\Parser;
    use Lcobucci\JWT\Signer\Hmac\Sha256;
    use Lcobucci\JWT\ValidationData;
    use PhpAmqpLib\Connection\AMQPStreamConnection;
    use PhpAmqpLib\Message\AMQPMessage;
    use think\Request;

    class Index
    {
        public function index()
        {
            $signer = new Sha256();
            $token = (new Builder())
                ->setIssuer('http://www.caiguanrong.com')
                ->setAudience('http://www.caiguanrong.com')
                ->setId('aasdfsad')
                ->setIssuedAt(time())
                ->setNotBefore(time() + 60)
                ->setExpiration(time() + 300)
                ->set('userInfo', ['name' => 'zhangsan'])
                ->sign($signer, 'http://www.caiguanrong.com')
                ->getToken();

            $token->getHeaders(); // Retrieves the token headers
            $token->getClaims();
            return json(['token' => (string)$token]);
        }

        public function hello($name = 'ThinkPHP5')
        {
            $token = $_SERVER['HTTP_AUTHORIZATION'];
            $token = (new Parser())->parse((string)$token);
            $data = new ValidationData(); // It will use the current time to validate (iat, nbf and exp)

            var_dump($token->validate($data)); // false, because we created a token that cannot be used before of `time() + 60`

            $data->setCurrentTime(time() + 60); // changing the validation time to future

            var_dump($token->validate($data)); // true, because validation information is equals to data contained on the token

            $data->setCurrentTime(time() + 4000); // changing the validation time to future

            var_dump($token->validate($data)); // false, because token is expired since current time is greater than exp
        }

        public function rabbit()
        {
            $connection = new AMQPStreamConnection('118.24.26.95', 5672, 'caiexception', 'CAI18181247889');
            $channel = $connection->channel();
            $channel->queue_declare('hello', false, false, false, false);
            $msg = new AMQPMessage('Hello World!');
            for($i=0;$i<2000;$i++){
                $channel->basic_publish($msg, '', 'hello');
            }

            echo " [x] Sent 'Hello World!'\n";
            $channel->close();
            $connection->close();
        }

        public function receive()
        {
            $connection = new AMQPStreamConnection('118.24.26.95', 5672, 'caiexception', 'CAI18181247889');
            $channel = $connection->channel();
            $channel->queue_declare('hello', false, false, false, false);

            echo " [*] Waiting for messages. To exit press CTRL+C\n";
            $callback = function ($msg) {
                echo ' [x] Received ', $msg->body, "\n";
            };
            $channel->basic_consume('hello', '', false, true, false, false, $callback);
            while (count($channel->callbacks)) {
                $channel->wait();
            }
            $channel->close();
            $connection->close();
        }

        public function tests()
        {
            $conn = [
                // Rabbitmq 服务地址
                'host' => '118.24.26.95',
                // Rabbitmq 服务端口
                'port' => '5672',
                // Rabbitmq 帐号
                'login' => 'caiexception',
                // Rabbitmq 密码
                'password' => 'CAI18181247889',
                'vhost'=>'/'
            ];
            $conn = new \AMQPConnection($conn);
            dd($conn);
        }
    }"


关于站长

职业:PHP程序员

现居:云南省昆明市五华区

邮箱:caiexception@163.com

热门标签

php
thinkphp
laravel
vue
node
nginx
java
yii
PHP设计模式
单列模式
mysql
docker
LInux
Redis
composer
Jenkins
微服务
lnmp

点击排行

windows10 安装docker并搭建lnmp开发环境
windows10 安装docker并搭建lnmp开发环境
windows10 安装docker并搭建lnmp开发环境
windows10 安装docker并搭建lnmp开发环境
windows10 安装docker并搭建lnmp开发环境
windows10 安装docker并搭建lnmp开发环境
windows10 安装docker并搭建lnmp开发环境
windows10 安装docker并搭建lnmp开发环境
windows10 安装docker并搭建lnmp开发环境
windows10 安装docker并搭建lnmp开发环境

最新评论

《docker搭建lnmp运行环境》
学习了
《docker搭建lnmp运行环境》
学习了
《docker搭建lnmp运行环境》
学习了
《docker搭建lnmp运行环境》
学习了
《docker搭建lnmp运行环境》
学习了
《docker搭建lnmp运行环境》
学习了
《docker搭建lnmp运行环境》
学习了
《docker搭建lnmp运行环境》
学习了
《docker搭建lnmp运行环境》
学习了
《docker搭建lnmp运行环境》
学习了