| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364 | <?phpnamespace App\Services\Auth;use App\Models\Company;use App\Models\LotteryWin;use App\Models\Organization;use App\Models\Member;use App\Models\Thirdlogin;use App\Repositories\CompanyRepository;use App\Repositories\MemberInfoRepository;use App\Repositories\MemberLogRepository;use App\Repositories\MemberRepository;use App\Repositories\ThirdloginRepository;use Illuminate\Contracts\Auth\Authenticatable;use Illuminate\Database\Eloquent\Model;use Illuminate\Support\Facades\Auth;use Illuminate\Support\Facades\Cache;use Illuminate\Support\Facades\Hash;use App\Repositories\OrganizationRepository;use Illuminate\Support\Facades\Session;class AuthService{    /**     * @var MemberRepository     */    protected $memberRepository;    /**     * @var CompanyRepository     */    protected $companyRepository;    /**     * @var MemberLogRepository     */    private $memberLogRepository;    /**     * @var ThirdloginRepository     */    private $thirdloginRepository;    /**     * @var MemberInfoRepository     */    private $memberInfoRepository;    //20200217 zmw 增加机构认证    protected $organizationRepository;    /**     * AuthService constructor.     * @param MemberInfoRepository $memberInfoRepository     * @param MemberRepository $memberRepository     * @param CompanyRepository $companyRepository     * @param MemberLogRepository $memberLogRepository     * @param ThirdloginRepository $thirdloginRepository     */    public function __construct(MemberInfoRepository $memberInfoRepository, MemberRepository $memberRepository, CompanyRepository $companyRepository, OrganizationRepository $organizationRepository, MemberLogRepository $memberLogRepository, ThirdloginRepository $thirdloginRepository)    {        $this->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();    }}
 |