fastadmin中redis+token的实现方法

Posted 风意不止

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了fastadmin中redis+token的实现方法相关的知识,希望对你有一定的参考价值。

由于线上是linux系统,所以redis的安装和配置,应该有所区别。等回去的时候,再研究把。

主要是宝塔面板对redis的支持。不仅要下载安装redis,还要放行相关的端口。这种放行,好像有两部分,第一宝塔面板放行,第二云服务器放行。

再redis驱动里配置链接方式。并且新增一个方法

/**
 * 存储reqToken
 * @param   string $token   Token
 * @param   int    $user_id 会员ID
 * @param   int    $expire  过期时长,0表示无限,单位秒
 * @return bool
 */
public function set_reqtoken($token, $value,$expire = 0)
{


    // return 1111;
        $result = $this->handler->set($token, $value,$expire);
    
    
    return $result;
}

新增一个函数,不要继承api的基类,用来鉴定每次请求的token

<?php

namespace app\\api\\controller;

use app\\common\\library\\Token;
use fast\\Random;
use think\\Request;
use think\\Response;

// use app\\common\\library\\Auth;
// use think\\Config;
use think\\exception\\HttpResponseException;
// use think\\exception\\ValidateException;
// use think\\Hook;
// use think\\Lang;
// use think\\Loader;
// use think\\Request;
// use think\\Response;
// use think\\Route;
// use think\\Validate;

class Reqtoken{
     /**
     * @var Request Request 实例
     */
    protected $request;

    /**
     * 默认响应输出类型,支持json/xml
     * @var string
     */
    protected $responseType = \'json\';


    public function __construct(Request $request = null)
    {
        $this->request = is_null($request) ? Request::instance() : $request;

        // 控制器初始化
        // $this->_initialize();

        // // 前置操作方法
        // if ($this->beforeActionList) {
        //     foreach ($this->beforeActionList as $method => $options) {
        //         is_numeric($method) ?
        //             $this->beforeAction($options) :
        //             $this->beforeAction($method, $options);
        //     }
        // }
    }
    public function maketoken(){


        // if ($this->request->isPost()){
        if ($this->request->isPost()){
                // halt($this->request->param("appKey"));
            if(!$this->request->param(\'appKey\')||$this->request->param(\'appKey\')!="caotama123!!"){
                $this->error("apitoken不合法!");
            }
            
            $reqtoken=Random::uuid();

            // halt(Token);
            Token::set_reqtoken("req:".$reqtoken, time().\'\', 3600);
            // Token::set($reqtoken, 1, 3600);
    
            // return time().\'\';
            // return $reqtoken;
            $this->success(\'请求成功\',[\'reqtoken\'=>$reqtoken]);
        }else{
            return "1111";
        }

        
    }




    /**
     * 操作成功返回的数据
     * @param string $msg    提示信息
     * @param mixed  $data   要返回的数据
     * @param int    $code   错误码,默认为1
     * @param string $type   输出类型
     * @param array  $header 发送的 Header 信息
     */
   public function success($msg = \'\', $data = null, $code = 1, $type = null, array $header = [])
    {

        // halt(111111);
        $this->result($msg, $data, $code, $type, $header);
    }

    /**
     * 操作失败返回的数据
     * @param string $msg    提示信息
     * @param mixed  $data   要返回的数据
     * @param int    $code   错误码,默认为0
     * @param string $type   输出类型
     * @param array  $header 发送的 Header 信息
     */
   public function error($msg = \'\', $data = null, $code = 0, $type = null, array $header = [])
    {
        $this->result($msg, $data, $code, $type, $header);
    }

    /**
     * 返回封装后的 API 数据到客户端
     * @access protected
     * @param mixed  $msg    提示信息
     * @param mixed  $data   要返回的数据
     * @param int    $code   错误码,默认为0
     * @param string $type   输出类型,支持json/xml/jsonp
     * @param array  $header 发送的 Header 信息
     * @return void
     * @throws HttpResponseException
     */
    public function result($msg, $data = null, $code = 0, $type = null, array $header = [])
    {
        $result = [
            \'code\' => $code,
            \'msg\'  => $msg,
            \'time\' => Request::instance()->server(\'REQUEST_TIME\'),
            \'data\' => $data,
        ];

       
        // 如果未设置类型则自动判断
        $type = $type ? $type : ($this->request->param(config(\'var_jsonp_handler\')) ? \'jsonp\' : $this->responseType);
        
        if (isset($header[\'statuscode\'])) {
            $code = $header[\'statuscode\'];
            unset($header[\'statuscode\']);
        } else {
            //未设置状态码,根据code值判断
            $code = $code >= 1000 || $code < 200 ? 200 : $code;
        }


        // halt(21212);
        $response = Response::create($result, $type, $code)->header($header);

        // halt(21212);
        throw new HttpResponseException($response);
    }
}

以上是关于fastadmin中redis+token的实现方法的主要内容,如果未能解决你的问题,请参考以下文章

Token+Redis实现接口幂等性

使用springboot和redis实现redis权限认证

redis存储token

SpringBoot+Redis实现多端登录+token自动续期和定期刷新+自定义注解和拦截器实现鉴权(角色和权限校验)

SpringBoot+Redis实现多端登录+token自动续期和定期刷新+自定义注解和拦截器实现鉴权(角色和权限校验)

使用Flask开发简单接口--借助Redis实现token验证