public function actionAddoauthlogin()
{
$arr['open_id'] = $_POST['open_id'];
$arr['access_token'] = $_POST['access_token'];
$arr['oauth_name'] = $_POST['oauth_name'];
$arr['oauth_iconurl'] = $_POST['oauth_iconurl']; //头像
$arr['type'] = (int) $_POST['type'];
$arr['create_time'] = time();
if (empty($arr['open_id']) || empty($arr['type'])) {
$this->ajaxMessage(1,'参数错误');
}
if (!in_array($arr['type'],array(1,2,3))) {
$this->ajaxMessage(1,'参数错误');
}
//判断第三方表中是否已经存在
$mobile = $arr['type'] . '_' . $arr['open_id']; //手机号和密码默认
$password = 'dalian_' . $arr['type'] . '_' . $arr['open_id'];
$loginsModel = new StdOauthLogin();
$userid = $loginsModel->isBindingByOpenid($arr['open_id'],$arr['type']);
if (empty($userid)) {//不存在,则需要入库
//将需要事务处理的操作放进try里
$transaction = Yii::app()->db->beginTransaction();
try {
//存入user表数据
$login_arr['nickname'] = $arr['oauth_name'];
$login_arr['avatar'] = $arr['oauth_iconurl'];
$adduserid = $loginsModel->addUser($mobile,$password,$login_arr);
if ($adduserid) {
//环信
//$passwords = $usersmodel->getUserPassword($adduserid);
//$response = Yii::app()->easemob->accreditRegister(array('username' => 'dalian_' . $adduserid,'password' => $passwords));
//存入第三方登录表
$arr['uid'] = $adduserid;
$loginsModel->attributes = $arr;
$loginsModel->save(false);
$userinfo = $loginsModel->login($mobile,$password); //登录
}
$transaction->commit(); //提交事务会真正的执行数据库操作
} catch (Exception $e) {
$transaction->rollback(); //如果操作失败, 数据回滚
$this->ajaxMessage(-1,'登录失败,请重试1');
}
} else {
$userinfo = $loginsModel->login($mobile,$password); //登录
if (!$userinfo) {
$this->ajaxMessage(-1,'登录失败,请重试2');
}
}
$this->ajaxMessage(0,'登录成功',$userinfo);
}
public function isBindingByOpenid($open_id,$type)
{
$sql = "select uid from std_oauth_login where open_id='{$open_id}' and type={$type}";
$rs = Yii::app()->db->createCommand($sql)->queryScalar();
return $rs ? $rs : '';
}
public function addUser($mobile,$password,$login_arr = array())
{
$Std = new StdStudent();
$salt = Common::randomkeys(4);
$Std->mobile = $mobile;
$Std->password = md5($password . $salt);
$Std->salt = $salt;
// $Std->create_time = time();
$Std->status = 2; // 用户账号注册时候的默认状态
if (!empty($login_arr)) {//第三方
$Std->nickname = $login_arr['nickname'];
$Std->avatar = $login_arr['avatar'];
} else {
$Std->nickname = $name; // 随机生成成长号
}
if ($Std->save(false)) {
return $Std->save(false) ? $Std->getPrimaryKey() : 0;
}
}
public function login($account,$password)
{
$sql = "select uid,mobile,password,salt,nickname,avatar,login_time
from std_student
where mobile='{$account}' and status=2";
$userInfo = Yii::app()->db->createCommand($sql)->queryRow();
// 判断是否登录成功
if ($userInfo['password'] == md5($password . $userInfo['salt'])) {
// unset($userInfo['password']);
unset($userInfo['salt']);
//$userInfo['avatar'] = Common::addimghttp($userInfo['avatar']);
//$userInfo['avatar'] = $userInfo['avatar'] ? Yii::app()->params['front'] . $userInfo['avatar'] : "";
// 更新登录相关信息
$o = new StdStudent();
$model = $o->findByPk($userInfo['uid']);
//$model->ip = $_SERVER['REMOTE_ADDR'];
$model->login_time = time();
$model->last_time = $userInfo['login_time'] ? $userInfo['login_time'] : $model->login_time;
$userInfo['key'] = md5(time());
$model->key = $userInfo['key'];
if ($model->save(false)) {
return $userInfo;
} else {
return array();
}
} else {
return array();
}
}