登录

待修改文件/usr/share/nginx/html/Application/User/Controller/LoginController.class.php
token_urlcorpid企业id
corpsecret为应用私钥,在应用管理中选择对应应用可见Secret

<?php

namespace User\Controller;

use Think\Controller;
use Think\Log;

/**
 * @Author: Martin Zhou
 * @Version: 1.0.1
 * @Copyright Tencent Security Response Center (TSRC)
 * @Project  https://security.tencent.com/index.php/xsrc
 */
class LoginController extends Controller
{
    /**
     * 登陆页面
     **/
    public function index()
    {
        $tmodel = M('setting');
        $title = $tmodel->where('id=1')->select();
        $this->assign('title', $title);
        $this->display();
    }

    /**
     * 登陆验证
     **/
    public function login()
    {
        $code = $_GET["code"];
        $uid = $this->get_uid_by_token_and_code($code);
        $uinfo = $this->get_user_by_id($uid);

        //用户信息
        $name = $uinfo->name;
        $avatar = $uinfo->avatar;
        $username = $uinfo->userid;
        $email = $uinfo->email;

        $member = M('member');
        $user = $member->where(array('email' => $email))->find();

        if (empty($user)){
            $data['salt'] = "";
            $data['pid'] = "";
            $chars = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
            $pchars = '0123456789';
            for($num=0;$num<8;$num++){
                $RandNum = rand(0,strlen($chars)-1);
                $data['salt'] .= $chars[$RandNum];
            }

            for($num=0;$num<32;$num++){
                $RandNum = rand(0,strlen($pchars)-1);
                $data['pid'] .= $pchars[$RandNum];
            }

            $data['username'] = $username;
            $data['email']= $email;
            $data['password'] = "11111111";

            $data['password'] = md5(md5(md5($data['salt']).md5($data['password'])."SR")."CMS"); //“SR”和“CMS”可修改
            $data['create_at']=time();
            $model = M("Member");
            if ($model->field('username,email,pid,salt,password,create_at')->data($data)->add()) {

                $user = $model->where(array('username'=>$data['username']))->find();

                $date =array(
                    'id' => $user['id'],
                    'update_at' => time(),
                    'login_ip' => get_client_ip(),
                );

//                if($model->save($date)){
//                    $this->redirect('index/index');
//                }
            }
            $user = $member->where(array('email' => $email))->find();
        }

        //不为空, 登录
        $token = md5(md5($user['email'] . time()) . time());
        $data = array(
            'id' => $user['id'],
            'update_at' => time(),
            'login_ip' => get_client_ip(),
            'token' => $token
            //2017-07-02 fix bug: token can't be inserted into databease. By. yuyang
        );

        //登陆成功
        $message_num = M('message')->where(array('userid' => $user['id'], 'read' => 0))->count();
        session('token', $token);
        session('userId', $user['id']);
        session('username', $user['username']);
        session('avatar', $user['avatar']);
        session('mnum', $message_num);
        redirect('./index.php');

//        if (!IS_POST) {
//            $this->error("非法请求");
//        }
//        $member = M('member');
//        $email = I('email', '', 'email');
//        $password = I('password');
//        $code = I('verify', '', 'strtolower');
//
//
//        echo $member."   ";
//        echo $email."   ";
//        echo $password."   ";
//        echo $code;

//        if (!($this->check_verify($code))) {
//            session('userId', null);
//            session('username', null);
//            $this->error('验证码错误', U('Login/index'));
//        }
//
//        $user = $member->where(array('email' => $email))->find();
//
//        if ($user['password'] != md5(md5(md5($user['salt']) . md5($password) . "SR") . "CMS")) {
//            $this->error('账户或密码错误', U('Login/index'));
//        }
//
//        if ($user['status'] == 0) {
//            $this->error('账号被删除或禁用,请联系管理员 :(');
//        }
//        $token = md5(md5($user['email'] . time()) . time());
//        //更新登陆信息
//        $data = array(
//            'id' => $user['id'],
//            'update_at' => time(),
//            'login_ip' => get_client_ip(),
//            'token' => $token
//            //2017-07-02 fix bug: token can't be inserted into databease. By. yuyang
//        );
//        //登陆成功
//        $message_num = M('message')->where(array('userid' => $user['id'], 'read' => 0))->count();
//
//        if ($member->save($data)) {
//            /**session('token',$token);
//             * $this->success("请先完成验证",U('Login/svalid?email=').$user['email']);
//             **/
//            session('token', $token);
//            session('userId', $user['id']);
//            session('username', $user['username']);
//            session('avatar', $user['avatar']);
//            session('mnum', $message_num);
//            redirect('./index.php');
//        }

    }

    /**
     * 企业微信登录验证
     */

    public function wxlogin()
    {
        $code = $_GET["code"];
        $uid = $this->get_uid_by_token_and_code($code);
        $uinfo = $this->get_user_by_id($uid);

        //用户信息
        $name = $uinfo->name;
        $avatar = $uinfo->avatar;
        $email = $uinfo->email;
        session('username', $name);
        session('avatar', $avatar);
        redirect('./index.php');

    }

    public function get_uid_by_token_and_code($code)
    {
        //{}&code={}
        $access_token = $this->get_access_token();
        $uid_url = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token=" . $access_token . "&code=" . $code;
        $re = file_get_contents($uid_url);
        $re_json = json_decode($re);
        $error_code = $re_json->errcode;
        if ($error_code == 0) {
            return $re_json->UserId;
        }
    }

    public function get_user_by_id($uid)
    {
        $access_token = session("access_token");
        if (empty($access_token)) {
            $access_token = $this->get_access_token();
//            return $re_json;
        }
        $uinfo_url = "https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token=" . $access_token . "&userid=" . $uid;
        $re = file_get_contents($uinfo_url);
        $re_json = json_decode($re);
        return $re_json;

    }


    public function get_access_token()
    {
        //修改corpId和secret
        //测试app
//        $token_url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ww8c&corpsecret=FLPVbwE1Bc";
        //生产app
        $token_url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=wx01&corpsecret=5u8DV3mM";
        $re = file_get_contents($token_url);
        $re_json = json_decode($re);
        $error_code = $re_json->errcode;
        if ($error_code == 0) {
            $access_token = $re_json->access_token;
            session("access_token", $access_token);
            return $access_token;
        }


    }


    //验证码
    public function verify()
    {
        ob_clean();
        $Verify = new \Think\Verify();
        $Verify->codeSet = '123456789abcdefg';
        $Verify->fontSize = 16;
        $Verify->length = 4;
        $Verify->entry();
    }

    protected function check_verify($code)
    {
        $verify = new \Think\Verify();
        return $verify->check($code);
    }


    //退出登录
    public function logout()
    {
        session('userId', null);
        session('username', null);
        session('avatar', null);
        session('mnum', null);
        redirect(U('Login/index'));
    }


}

待修改文件/usr/share/nginx/html/Application/User/View/Login/index.html
1、根据实际情况修改window.WwLogin,其中
"appid"企业id
"agentid"为应用id,在应用管理中选择对应应用可见AgentId
"redirect_uri"为登录页面地址,根据实际情况填写
2、若"redirect_uri"为https请求,则https://rescdn.qqmail.com/node/ww/wwopenmng/js/sso/wwLogin-1.0.0.js为https,若为http,则为http

<!DOCTYPE html>
<html class=" js no-touch csstransforms csstransforms3d svg" lang="">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Tencent xSRC - 企业安全应急响应中心</title>
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="__PUBLIC__/Admin/app.user.css">
    <style type="text/css">.cf-hidden {
        display: none;
    }

    .cf-invisible {
        visibility: hidden;
    }</style>
</head>
<body class="page-loaded" style="font-family:微软雅黑;">

<div class="pageload" style="display: none;">
    <div class="pageload-inner">
        <div class="sk-rotating-plane"></div>
    </div>
</div>

<div class="app signin v2 usersession">
    <div class="session-wrapper">
        <div class="session-carousel slide" data-ride="carousel" data-interval="3000">

            <div class="carousel-inner" role="listbox">
                <div class="item active"
                     style="background-image:url(__PUBLIC__/Admin/userpage.jpg);background-size:cover;background-repeat: no-repeat;background-position: 50% 50%;">
                </div>
            </div>
        </div>
    </div>
    <div class="card bg-white no-border">
        <div class="card-block" style="padding:20% 5% 5% 5%;">
            <form role="form" class="form-layout" action="{:U('login/login')}" method="post">
<!--                <div class="text-center m-b">-->
<!--                    <img src="__PUBLIC__/Admin/logo.png" style="width:60%;height:60%"></img>-->
<!--                    &lt;!&ndash;<p>携手共建安全生态</p>&ndash;&gt;-->
<!--                </div>-->
<!--                <div class="form-inputs p-b">-->
<!--                    <label class="text-uppercase">邮箱(账户名)</label>-->
<!--                    <input type="text" class="form-control input-lg" placeholder="邮箱" name="email"/>-->
<!--                    <label class="text-uppercase">密码</label>-->
<!--                    <input type="password" class="form-control input-lg" placeholder="密码" name="password"/>-->
<!--                    <label class="text-uppercase">验证码</label>-->
<!--                    <div style="float:left;width:55%">-->
<!--                        <input type="text" name="verify" class="form-control input-lg" id="exampleInputCode"-->
<!--                               placeholder="验证码">-->
<!--                    </div>-->
<!--                    <div style="float:right;">-->
<!--                        <a href="javascript:void(0)"><img class="verify" src="{:U('login/verify')}" alt="点击刷新"/></a>-->
<!--                    </div>-->
<!--                    <div style="float:left;width:100%">-->
<!--                        <p><a href="{:U('forget/index')}">忘记密码 | </a><a href="{:U('reg/index')}">账户注册</a></p>-->
<!--                    </div>-->
<!--                </div>-->
<!--                <button class="btn btn-primary btn-block btn-lg m-b" type="submit">立即登录</button>-->
                <div id="wxCode"></div>
                <!--<div class="divider">
                <span>或</span>
                </div>
                <a class="btn btn-block no-bg btn-lg m-b" href="{:U('reg/index')}">立即注册</a>
                </div>-->
            </form>
        </div>
    </div>
</div>
</div>
<script src="__PUBLIC__/Admin/app.min.js"></script>
<div class="bg-default"></div>
<div class="bg-primary"></div>
<div class="bg-success"></div>
<div class="bg-warning"></div>
<div class="bg-danger"></div>
<div class="bg-info"></div>
<div class="bg-white"></div>
<div class="bg-dark"></div>

</body>
<script src="__STATIC__/js/jquery-1.10.2.js"></script>
<script src="https://rescdn.qqmail.com/node/ww/wwopenmng/js/sso/wwLogin-1.0.0.js"></script>

<script>
//生产企业微信登录配置
    window.WwLogin({
        "id" : "wxCode",
        "appid" : "wx01",
        "agentid" : "108",
        "redirect_uri" :"https%3a%2f%2fsec.wuev.cn%2fxSRC_1.0.1%2fuser.php%3fm%3d%26c%3dlogin%26a%3dlogin",
        "state" : "",
        "href" : "",
    });
</script>
<script>
    $(function () {
        $(".verify").click(function () {
            var src = "{:U('login/verify')}";
            var random = Math.floor(Math.random() * (1000 + 1));
            $(this).attr("src", src + "&random=" + random);

        });
    })
</script>
</html>
最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351

推荐阅读更多精彩内容