关于API token的应用

如何判断前端页面是否登录状态?
1、登录成功JQ生成缓存

  <script type="text/javascript" src="js/jquery-1.6.2.min.js"></script>  
  //jq生成以及获取缓存插件,给予jq
  <script type="text/javascript" src="js/jquery.cookie.js"></script>  
$.cookie("token", token, { expires: days, path: "/" });

第一个为缓存名,第二个为缓存的值token(由后台提供),days缓存失效时间由后台提供数据,“/”缓存的数据使用范围表示全局,全部网页可用

2、登录成功之后后台的处理
登录成功之后,将用户的user_id存入到token表中。返回数据是一个token字符串

    public function setToken($user_id){
        $token = new static();
        $token_str = md5($user_id . time() . mt_rand(0, 99999));
        $token->user_id  = $user_id;
        $token->time_out = $this->getTimeOut();
        $token->token    = $token_str;
        return $token->save() ? $token_str : false;
    }

3、在登录页面,成功之后,将返回的token字符串存入到cookie中

function set_user(token) {
    var days = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 7;
    $.cookie("token", token, { expires: days, path: "/" });
}

4、前台页面获取token

//根据token获取token
function get_user() {
    return $.cookie("token") || 0;
}
//如果获取不到token,跳转到登录页面,由前端判断去登录
function get_user_login() {
    return get_user() || (location.href = _MOBILE +"login_login");
}

5、接口判断是否有token ajax提交、

function get_user_info() {
        var token = get_user_login();
        $.ajax({
            url: _API + "user_center",//请求地址
            type: "POST",
            dataType: "json",
            async: true,
            //头部信息,ajax提交token的方式
            beforeSend: function beforeSend(request) {
                request.setRequestHeader("Authorization", token);
            },
            success: function success(data) {
                if (data.type == 'ok') {
                    //如果返回的数据 type的值为ok 成功获取数据 
                } else {
                    location.href = _MOBILE +"login_login";

                }
            }
        });
}

6、后台如何判断是否接收到头部信息

//PHP获取头部信息的函数,可以获取到ajax提交的头部信息
function getToken()
    {
        $headers = array();
        foreach ($_SERVER as $key => $value) {
            if ('HTTP_' == substr($key, 0, 5)) {
                $headers[str_replace('_', '-', substr($key, 5))] = $value;
            }
        }
        if (isset($headers["AUTHORIZATION"]))
            return $headers["AUTHORIZATION"];
        else
            return "";
    }
    //api模型 自动加载获取token,根据token获取user_id 如果获取不到,--->登录
class ApiController extends GqController
{
    public $user_id;
    public function __construct($_init = false)
    {
        if ($_init) {
            /** @var TokenGqModel $tokenModel */
            $tokenModel    = gqmodel('token');
            $token         = getToken();
            $this->user_id = $tokenModel->getUserIdByToken($token);
            if (!$this->user_id) {
                return_error('请登陆', '999');
            }
        }
    }
}

总结:
接口对接实质:
1、登录成功php生成token储存到数据库表中,
2、返回到前端页面js储存cookie的值‘token’
3、ajax提交头部信息,头部信息的值用token
4、后台PHP接收头部信息,接收到了获取用户id

猜你喜欢

转载自blog.csdn.net/weixin_42597707/article/details/81482578