kefu/application/service/controller/Login.php

151 lines
5.8 KiB
PHP

<?php
/**
* 登录控制器
*/
namespace app\service\controller;
use PHPGangsta\GoogleAuthenticator;
use Repository\LogRepository;
use think\Controller;
class Login extends Controller
{
/**
* google 二次验证码长度
* @var int
*/
protected $googleAuthSecretLength = 64;
/**
* google 二次验证码超时时间
* @var int
*/
protected $googleAuthTimeout = 300;
public function index()
{
$kf_id = input('kf_id');
if (!empty($kf_id)) {
$redis = new Redis();
$result = $redis::instance()->hdel('kfList', 'KF'.$kf_id);
$update = db('users')->where('id', $kf_id)->update(['online' => 2]);
}
$this->assign([
// 'socket' => getHost('ws').':'.config('socket_port'),
'socket' => config('socket_url').':'.config('socket_port'),
// 'socket' => config('socket_url'),
'version' => config('version'),
'ga_android' => config('ga_android'),
'ga_ios' => config('ga_ios'),
]);
return $this->fetch();
}
public function doLogin()
{
if(request()->isAjax()){
$userName = input('post.username');
$password = input('post.password');
$user = db('users')->where('user_name', $userName)->find();
if(empty($user) || !password_verify($password, $user['user_pwd']) || $user['status'] !== 1){
return json(['code' => -2, 'data' => '', 'msg' => '用户名或密码错误']);
}
$token = null;
if (isset($user['google_secret']) && strlen($user['google_secret']) == $this->googleAuthSecretLength) {
$token = md5(time().$user['id']);
$redis = new \Redis();
$redis->connect(config('cache.host'),config('cache.port'));
$redis->auth(config('cache.password'));
$info = ['user_id'=>$user['id'], 'user_name'=>$user['user_name'],
'access_token'=>$user['access_token'], 'user_avatar'=>$user['user_avatar']];
$redis->set($token, json_encode($info), $this->googleAuthTimeout);
return json(['code' => 1, 'token' => $token, 'msg' => '请输入谷歌验证码']);
}
// if($user['online'] == 1){
// @unlink(session_save_path()."/".$user['session_id']);
// // db('users')->where('id',$this->kf2Num(session('l_user_id')))->update(['session_id'=>$sessionId]);
// }
session('kf_token', $user['access_token']);
// $sessionId = session_id();
// 设置session标识状态
session('l_user_name', $user['user_name']);
session('l_user_id', $user['id']);
session('l_user_avatar', $user['user_avatar']);
session('l_user_last_login', time());
db('users')->where('id', $user['id'])->update(['expire_time' => time()+7*24*60*60]);
// db('users')->where('id', $user['id'])->update(['expire_time' => time()+7*24*60*60,'session_id'=>"sess_".$sessionId]);
return json(['code' => 1, 'data' => url('index/index'), 'msg' => '登录成功', 'uinfo' => ['id' => $user['id'],
'access_token' => $user['access_token']]]);
}
$this->error('非法访问');
}
public function loginOut()
{
$kf_id = session('l_user_id');
session('l_user_name', null);
session('l_user_id', null);
session('l_user_avatar', null);
session('l_user_last_login', null);
$this->redirect(url('login/index?kf_id='.$kf_id));
}
protected function kf2Num($kfId){
if(!is_numeric($kfId) && strpos($kfId,'KF') === 0){
$kfId = substr($kfId,2);
}
return $kfId;
}
public function google_auth ()
{
if (request()->isPost()) {
$google_auth = input('param.google_auth');
$token = input('param.token');
if (empty($google_auth)) {
return json(['code' => -1, 'data' => '', 'msg' => '谷歌验证码不能为空']);
}
if (empty($token)) {
return json(['code' => -1, 'data' => '', 'msg' => '参数错误']);
}
$redis = new \Redis();
$redis->connect(config('cache.host'),config('cache.port'));
$redis->auth(config('cache.password'));
$userInfo = $redis->get($token);
if ($userInfo) {
$userInfo = json_decode($userInfo, true);
$ga = new GoogleAuthenticator();
$google_secret = db('users')->where('id', $userInfo['user_id'])->value('google_secret');
if($ga->verifyCode($google_secret, $google_auth)){
session('kf_token', $userInfo['access_token']);
// $sessionId = session_id();
// 设置session标识状态
session('l_user_name', $userInfo['user_name']);
session('l_user_id', $userInfo['user_id']);
session('l_user_avatar', $userInfo['user_avatar']);
session('l_user_last_login', time());
db('users')->where('id', $userInfo['user_id'])->update(['expire_time' => time()+7*24*60*60]);
// db('users')->where('id', $user['id'])->update(['expire_time' => time()+7*24*60*60,'session_id'=>"sess_".$sessionId]);
return json(['code' => 1, 'data' => url('index/index'), 'msg' => '登录成功', 'uinfo' => ['id' => $userInfo['user_id'],
'access_token' => $userInfo['access_token']]]);
}
}
return json(['code' => -1, 'data' => '', 'msg' => '校验失败']);
}
}
}