151 lines
5.8 KiB
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' => '校验失败']);
|
|
}
|
|
|
|
}
|
|
} |