thinkphp 开发api token验证

<?php
namespace app\api\controller;

use think\Request;

class Api extends \think\Controller
{
    public function __construct(Request $request)
    {
        if ($request->Controller() !== 'Api') {
            $token = isset($request->post(false)['token'])?$request->post(false)['token']:'';
            // 实例化Redis
            $redis = new \Redis();
            $redis -> connect('localhost',6379);
            $redis -> auth('8G66336951a.');
            if (!$redis -> get($token)) {
                $data = [ 'info' => '信息为空', "status"=> 1 ];
                echo json_encode($data);
                exit;
            }
        }
    }

    /**
     * 通过传入账号密码交换token
     * @param  string $user     账号
     * @param  string $password 密码
     * @return string           token
     */
    public function token(Request $request)
    {
        # 接收post数据
        $post = $request->post(false);
        # 判断
        if (!isset($post['user']) || !isset($post['password'])) {
            $data = [ 'info' => '未指定账户密码', "status"=> 1 ];
            return json($data);
        }
        $user = $post['user'];
        $password = $post['password'];
        if ($user=='root' && $password=='123456') {

            // 实例化Redis
            $redis = new \Redis();
            $redis -> connect('localhost',6379);
            $redis -> auth('8G66336951a.');

            // 使用uuid生成唯一秘钥写入redis中,并设置30分钟后过期
            $hash = password_hash($this->uniqidReal(),PASSWORD_DEFAULT);
            if ($redis -> set($hash,$user) && $redis -> setTimeout($hash, 60 )) {
                $data = [ 'info' => $hash, "status"=> 0 ];
            }else{
                $data = [ 'info' => '系统错误', "status"=> 1 ];
            }

            return json($data);
            // echo json_encode($data);

        } else {
            $data = [ 'info' => '验证失败', "status"=> 1 ];
            return json($data);
        }
    }

    /**
     * 生成唯一的uuid值
     * @param  integer $lenght 生成的uuid长度
     * @return
     */
    public function uniqidReal($lenght = 13)
    {
        if (function_exists("random_bytes")) {
            $bytes = random_bytes(ceil($lenght / 2));
        } elseif (function_exists("openssl_random_pseudo_bytes")) {
            $bytes = openssl_random_pseudo_bytes(ceil($lenght / 2));
        } else {
            throw new Exception("no cryptographically secure random function available");
        }
        return substr(bin2hex($bytes), 0, $lenght);
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容