账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    利用python读取前端JS中的TOKEN。报错:TypeError: 'window' 未定义,请教!
    110
    0

    利用python读取JS中的TOKEN。小白刚学,没有理解,没读不出来,望高手指点,谢谢!
    报错:TypeError: 'window' 未定义

    一、python程序

    import execjs
    
    _JS = execjs.compile(open("aa.js", "r", encoding='UTF-8').read())  # 初始化JS
    token = _JS.call('loginByToken','callback')
    
    print(token)

    二、js文件

    JS保存文件名aa.js.代码如下

    function getCsrfToken(callback){
        get('/token/csrf',{},function(json){
            CSRF_NAME = json.data.csrf_name;
            CSRF_TOKEN = json.data[CSRF_NAME];
            if(typeof(callback) == 'function') callback();
        })
    }
    
    function check_token(){
        getCsrfToken(verify);
    
        //检测是否有token
        function verify(){
            $.post('/token/verify',{token:TOKEN,csrf_token:CSRF_TOKEN},function(json){
                json = $.parseJSON(json);
                if(json[CSRF_NAME]) CSRF_TOKEN = json[CSRF_NAME];
                if(json.code != 0){
                    loginByToken(function(){
                        hashChangeEvent();
                    })
                }else{
                    hashChangeEvent();
                }
            })
        }
    }
    
    
    function loginByToken(callback){
        post('/main/auth/login',function(json){
            if(json.code == 0){
                TOKEN = json.data.token;
            }else{
                window.location = REDIRECT_LOGIN_URL;
                return;
            }
            if(typeof(callback) == 'function') callback();
        })
    }
    
    
    function post(url,parames,callback){
        if(!CSRF_TOKEN){
            getCsrfToken(function(){
                post(url,parames,callback);
            });
            return;
        }
         if(typeof(parames) == 'string'){
             parames += '&'+CSRF_NAME+'='+CSRF_TOKEN;
             if(TOKEN) parames += '&token='+TOKEN;
         }else if(typeof(parames) == 'object'){
             parames[CSRF_NAME] = CSRF_TOKEN;
             if(TOKEN) parames.token = TOKEN;
    
         }else if(typeof(parames) == 'function'){
             callback = parames;
             parames = {};
             parames[CSRF_NAME] = CSRF_TOKEN;
             if(TOKEN) parames.token = TOKEN;
         }else if(typeof(parames) == 'undefined'){
             parames = {};
             parames[CSRF_NAME] = CSRF_TOKEN;
             if(TOKEN) parames.token = TOKEN;
         }
    
         CSRF_TOKEN = null;
         $.post(url,parames,function(data){
             var json = $.parseJSON(data);
             if(json[CSRF_NAME]) CSRF_TOKEN = json[CSRF_NAME];
             if(json.data && json.data.token) {
                 TOKEN = json.data.token;
                 localStorage.setItem('CJKT_MAIN_TOKEN',TOKEN);
             }
             if(json.code != 0){
                 if($('#loading').length>0) loading(false);
                 switch(parseInt(json.code)){
                     case 40001:
                             alert(json.msg);
                             break;
                     case 40003:
                     case 40004:
                         window.location = REDIRECT_LOGIN_URL;
                         break;
                     case 40005:
                         loginByToken(function(){
                             post(url,parames,callback);
                         })
                         break;
                     case 40006:
                         alert('权限不足');
                         break;
                     case 40007:
                         Page.go('index');
                         break;
                     case 40009:
                         //csrftoken错误
                         getCsrfToken(function(){
                            post(url,parames,callback);
                        });
                        return;
                         break;
                 }
             }
    
             if(typeof(callback) == 'function'){
                 callback(json);
             }
    
         });
    }
    
    window.alert = function(msg){
        Toast.error(msg);
    }
    4
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    更多回答
    扫一扫访问手机版

    回答动态

    师傅被妖怪抓走了:发布了悬赏问题火爆全网的“元宇宙”到底是什么?预计能赚取 1积分收益
    酒后略带风情:发布了悬赏问题Android内存中Graphics与Code占用过高预计能赚取 10积分收益
    扛起拖把扫天下:发布了悬赏问题typescript如何导出接口配置?求解,谢谢!预计能赚取 10积分收益
    发布了悬赏问题Vue 如何改变返回页面的路径?如让B页面只能返回到A页面.预计能赚取 11积分收益
    发布了悬赏问题vue H5移动端;底部bottom固定定位,安卓弹起键盘导致页面变形如何解决?预计能赚取 10积分收益
    发布了悬赏问题请问为什么tomcat8.5 GET请求中文正常,POST请求还需要设置UTF-8.预计能赚取 10积分收益
    发布了悬赏问题vue2.5+ts创建以及引入jq的方法预计能赚取 11积分收益
    情场浪女:发布了悬赏问题import ggplot时报错module 'pandas' has no attribute 'tslib'预计能赚取 10积分收益
    见心书画许老师18753375161:发布了悬赏问题echarts3 legend禁止点击事件,允许悬浮事件预计能赚取 11积分收益
    aa_92cb0bd09f:发布了悬赏问题codewar上的一个问题预计能赚取 11积分收益