LoginController.php 7.7 KB
<?php
/**
 * 登录注册
 * Author: xiaojie
 * DateTime: 2018/11/26 13:50
 */
namespace app\portal\controller;

use app\portal\model\UserModel;
use app\portal\validate\UsersValidate;
use cmf\controller\HomeBaseController;
use cmf\lib\Storage;
use anerg\OAuth2\OAuth;
use think\Config;

class LoginController extends HomeBaseController
{
    private $config;

    //登录页面
    public function login(){
        return $this->fetch();
    }

    //登录提交
    public function loginCommit(){
        //提交参数手机号(mobile),密码(user_pass)
        $param = $this->request->param();
        $validate = new UsersValidate();
        $userModel = new UserModel();
        $map = [
            'mobile' => $param['mobile'],
            'user_pass' => cmf_password($param['user_pass']),
            'user_type' => 2,
            'user_status' => 1,
        ];
        $userInfo = $userModel->where($map)->find();
        if(!$userInfo){
            $this->apiResponse(0,'账号或密码错误');
        }
        $ip = get_client_ip();
        $data = [
            'id' => $userInfo['id'],
            'last_login_time' => time(),
            'last_login_ip' => $ip,
        ];

        if(!$validate->scene('edit')->check($data)){
            $this->apiResponse(0,$validate->getError());
        }
        $res = $userModel->isUpdate(true)->save($data);
        if($res){
            //用户信息存入session
            cmf_update_current_user($userInfo);
            $this->apiResponse(1,'登录成功');
        }
        $this->apiResponse(0,'未知错误');
    }

    //第三方登录页面
    public function thirdLogin(){
        return $this->fetch();
    }

    //注册页面
    public function register(){
        return $this->fetch();
    }

   //注册提交
    public function registerCommit(){
        //提交参数手机号(mobile),验证码(mobile_code),密码(user_pass)
        $param = $this->request->param();
        //验证验证码是否正确
        $common = new CommonController();
        $common->validateMobileCode($param);
        //验证场景add
        $validate = new UsersValidate();
        if(!$validate->scene('add')->check($param)){
            $this->apiResponse(0,$validate->getError());
        }
        if(empty($param['user_pass'])){
            $this->apiResponse(0,'密码不能为空!');
        }
        //是否已注册
        $userModel = new UserModel();
        $userInfo = $userModel->where(['mobile'=>$param['mobile'],'user_type'=>2])->find();
        if($userInfo){
            $this->apiResponse(0,'此账号已被注册');
        }
        //新增注册信息
        $info['mobile'] = $param['mobile'];
        $info['user_pass'] = cmf_password($param['user_pass']);
        $info['user_type'] = 2;
        $info['create_time'] = time();
        $res = $userModel->allowField(true)->save($info);
        if($res){
            $this->apiResponse(1,'注册成功');
        }
        $this->apiResponse(0,'未知错误');
    }

    //首页个人中心
    public function getInfo(){
        $avatar = session('avatar');
        $this->assign('avatar',$avatar);
    }

    //首页个人中心修改头像
    public function updateAvatar(){
        //判断是否登录
        $login = cmf_is_user_login();
        if($login){
            $file   = $this->request->file('avatar');
            if (empty($file)) {
                $this->apiResponse(0,'未检测出文件!');
            }
            $result = $file->validate([
                'ext'  => 'jpg,jpeg,png',
                'size' => 1024 * 1024
            ])->move(WEB_ROOT . 'upload' . DIRECTORY_SEPARATOR . 'avatar' . DIRECTORY_SEPARATOR);

            if ($result) {
                $avatarSaveName = str_replace('//', '/', str_replace('\\', '/', $result->getSaveName()));
                $avatar         = 'avatar/' . $avatarSaveName;
                $avatarPath = WEB_ROOT . "upload/" . $avatar;

                $storage = new Storage();
                $storage->upload($avatar, $avatarPath, 'image');
                $id = cmf_get_current_user_id();

                $userModel = new UserModel();
                $res = $userModel->allowField(true)->update(['id'=>$id,'avatar'=>$avatar]);
                if($res){

                    session('avatar', $avatar);
                    $this->apiResponse(1,'上传成功!');
                }else{
                    $this->apiResponse(0,'上传失败!');
                }
            } else {
                $this->apiResponse(0,$file->getError());
            }
        }else{
            $this->apiResponse(0,'请登录后修改头像!');
        }
    }

    //个人中心编辑页面
    public function editInfo(){
        $avatar = session('avatar');
        $nickname = session('nickname');
        $this->assign('avatar',$avatar);
        $this->assign('nickname',$nickname);
        return $this->fetch();
    }

    //个人中心编辑提交
    public function updateNickname(){
        //判断是否登录
        $login = cmf_is_user_login();
        $nickname = $this->request->param('nickname');
        if($login){
            $userModel = new UserModel();
            $id = cmf_get_current_user_id();
            $res = $userModel->allowField(true)->update(['id'=>$id,'user_nickname'=>$nickname]);
            if($res){
                session('user_nickname', $nickname);
                $this->apiResponse(1,'成功!');
            }else{
                $this->apiResponse(0,'失败!');
            }
        }else{
            $this->apiResponse(0,'请登录后修改资料!');
        }
    }

    //第三方微信登录
    public function wx_login(){
        $config = Config::get('wx_login');
        $app_id = $config['app_id'];
        $redirect_uri = $config['redirect_uri'];
        $scope = $config['scope'];
        $state = md5(uniqid(rand(), TRUE));
        $url = 'https://open.weixin.qq.com/connect/qrconnect?appid='.$app_id.'&redirect_uri='.$redirect_uri.'&response_type=code&scope='.$scope.'&state='.$state.'#wechat_redirect';
        $res = $this->http_get($url);
        var_dump(11);
        var_dump($res);exit;
    }

    //curl  get请求
    public function http_get($url){
        $curl = curl_init();//启动一个CURL会话
        curl_setopt($curl, CURLOPT_URL,$url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在
        curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
        curl_setopt($curl, CURLOPT_HEADER, false);//不开启header
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // 获取的信息以文件流的形式返回
        $result = curl_exec($curl); //执行操作
        curl_close($curl);
        return $result;
    }

    //curl post请求
    public function http_post($url,$data,$headers){
        $curl = curl_init();//启动一个CURL会话
        curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在
        curl_setopt($curl, CURLOPT_POST, true); // 发送一个常规的Post请求
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
        curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
        curl_setopt($curl, CURLOPT_HEADER, true); // 开启header
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);//请求头部
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // 获取的信息以文件流的形式返回
        $result = curl_exec($curl); //执行操作
        curl_close($curl);
        return $result;
    }
}