memberRepository = $memberRepository; $this->companyRepository = $companyRepository; $this->memberLogRepository = $memberLogRepository; $this->thirdloginRepository = $thirdloginRepository; $this->memberInfoRepository = $memberInfoRepository; $this->organizationRepository = $organizationRepository; } public function loginByAccount($account, $password = '', $isAutoLogin = 0) { $user = $this->checkUser($account, $password, 2); if (!$user) { return false; } if(!$this->checkPwdLog($user)){ return false; } $this->login($user, $isAutoLogin); //绑定微信和中奖 $open_id = Session::get('open_id'); if (!empty($open_id)) { $union_id = Session::get('union_id', ''); $data = [ 'uid' => $user->id, 'utype' => 2, 'type' => 3, 'openid' => $open_id, 'unionid' => $union_id, ]; Thirdlogin::create($data); $prize_id = Session::get('prize_id',0); if (!empty($prize_id)) { $win = new LotteryWin(); $win->member_id = $user->id; $win->prize_id = $prize_id; $win->created_at = date('Y-m-d H:i:s'); $win->save(); } Session::forget('open_id'); Session::forget('union_id'); Session::forget('prize_id'); Session::save(); } return $user; } public function loginByCompany($account, $password, $isAutoLogin = 0) { $user = $this->checkUser($account, $password, 1); if (!$user) { return false; } if(!$this->checkPwdLog($user)){ return false; } $this->login($user, $isAutoLogin); return $user; } public function loginByOrganization($account, $password, $isAutoLogin = 0) { $user = $this->checkUser($account, $password, 3); if (!$user) { return false; } $this->login($user, $isAutoLogin); return $user; } /** * @return string */ public function resetPasswordToken($data) { $token = str_random(32); Cache::put($token, $data, 24 * 60); return $token; } public function checkResetPasswordToken($token) { return Cache::get($token, false); } public function resetPassword($token, $password) { $data = Cache::pull($token); if ($data['utype'] == 1) { $user = $this->companyRepository->resetPassword($data['type'], $data[$data['type']], $password); } elseif ($data['utype'] == 2) { $user = $this->memberRepository->resetPassword($data['type'], $data[$data['type']], $password); } $this->memberLogRepository->createLog($user, 2045, []); return $data['utype']; } public function sendEmailHook($email, $token) { Cache::put('reset_password' . $email, $token, 24 * 60); } public function getTokenByEmail($email) { return Cache::pull('reset_password' . $email); } /** * 检查微信账号是否已绑定账号和登录网站 * @param array $wechatUser * @param int $type 2微信开放平台,3微信公众号,4微信小程序 * @return bool */ public function wechatCheck(array $wechatUser, $type = 2) { $user = $this->thirdloginRepository->checkWechat($wechatUser['openid'], isset($wechatUser['unionid']) ? $wechatUser['unionid'] : "", $type); if (!$user) { return false; } return $user; } /** * 检查qq账号是否已绑定账号和登录网站 * @param array $qqUser * @param int $type * @return bool */ public function qqCheck(array $qqUser, $type = 1) { $user = $this->thirdloginRepository->checkQQ($qqUser['openid']); if (!$user) { return false; } return $user; } /** * @param array $wechatUser * @param Model|Authenticatable $user * @param bool $update_message 是否更新用户信息 * @param int $type 2微信开放平台,3微信公众号,4微信小程序 * @throws \Prettus\Validator\Exceptions\ValidatorException */ public function wechatRegister(array $wechatUser, $user, $update_message = false, $type = 2) { $data['uid'] = $user->id; $data['utype'] = ($user instanceof Member) ? 2 : 1; $data['type'] = $type; $data['subsite_id'] = $user->subsite_id; $data['openid'] = $wechatUser['openid']; $data['unionid'] = isset($wechatUser['unionid']) ? $wechatUser['unionid'] : ""; $this->thirdloginRepository->create($data); // if ($update_message) {//暂时不更新信息 // if ($user instanceof Member) { // $image_path="person/images/".uniqid().'.jpg'; // download($wechatUser['headimgurl'], $image_path); // $this->memberInfoRepository->updateInfo(['images'=>$image_path], $user->id); // } else { // $image_path="company/logo/".uniqid().'.jpg'; // download($wechatUser['headimgurl'], $image_path); // $this->companyRepository->save(['logo'=>$image_path], $user->id); // } // } } /** * @param array $qqUser * @param Model|Authenticatable $user * @param bool $update_message 是否更新用户信息 * @param int $type 1 QQ * @throws \Prettus\Validator\Exceptions\ValidatorException */ public function qqRegister(array $qqUser, $user, $update_message = false, $type = 1) { $data['uid'] = $user->id; $data['utype'] = ($user instanceof Member) ? 2 : 1; $data['type'] = $type; $data['subsite_id'] = $user->subsite_id; $data['openid'] = $qqUser['openid']; $data['unionid'] = ""; $this->thirdloginRepository->create($data); // if ($update_message) {//暂时不更新信息 // if ($user instanceof Member) { // $image_path="person/images/".uniqid().'.jpg'; // download($wechatUser['headimgurl'], $image_path); // $this->memberInfoRepository->updateInfo(['images'=>$image_path], $user->id); // } else { // $image_path="company/logo/".uniqid().'.jpg'; // download($wechatUser['headimgurl'], $image_path); // $this->companyRepository->save(['logo'=>$image_path], $user->id); // } // } } /** * 检查用户是否存在 * @param $username * @param $password * @param $utype 1企业,2用户 * @return bool|\Illuminate\Database\Eloquent\Model|null */ public function checkUser($username, $password, $utype) { if ($utype == 2) { $user = $this->memberRepository->getMemberByAccount($username); } elseif ($utype == 3) { $user = $this->organizationRepository->getOrganizationByAccount($username); } else { $user = $this->companyRepository->getCompanyByAccount($username); } if (!$user) { return false; } if ($password && !Hash::check($password, $user->password)) { if (!empty($user->old_password)) { //旧系统数据密码转移 $oldmembers = \App\Transfer\Member::select('pwd_hash')->where('uid', $user->id)->first(); if (md5(md5($password) . $oldmembers->pwd_hash . 'pNxOnSBtDzW7-7Pi') == $user->old_password) { $user->old_password = ""; $user->password = Hash::make($password); $user->save(); return $user; } } return false; } return $user; } public function checkPwdLog($user) { $reglog = $this->memberLogRepository->getMemberLog( $user->id, $user->utype, 1000 ); $regdata = $reglog->toArray()['data']; if(count($regdata) >= 1){ $log = array_shift($regdata); $reg_time = strtotime($log['created_at']); }else{ $reg_time = 0; } if((time()-$reg_time)<7776000){ return true; } $pwdLog = $this->memberLogRepository->getMemberLog( $user->id, $user->utype, 2045 ); $data = $pwdLog->toArray()['data']; if(count($data) >= 1){ $log = array_shift($data); $time = strtotime($log['created_at']); }else{ $time = 0; } if((time()-$time)>7776000){ return false; }else{ return true; } } public function login($user, $isAutoLogin = 0) { $isAutoLogin = $isAutoLogin ? true : false; if ($user instanceof Company) { Auth::guard('web-company')->login($user, $isAutoLogin); $this->companyRepository->updateLoginStatus($user); $this->memberLogRepository->createLog($user, 1001, []); } elseif ($user instanceof Organization) { Auth::guard('web-organization')->login($user, $isAutoLogin); $this->organizationRepository->updateLoginStatus($user); $this->memberLogRepository->createLog($user, 1001, []); } else { Auth::guard('web-member')->login($user, $isAutoLogin); $this->memberRepository->updateLoginStatus($user); $this->memberLogRepository->createLog($user, 1001, []); } } public function logout() { Auth::guard('web-company')->logout(); Auth::guard('web-member')->logout(); Auth::guard('web-organization')->logout(); } }