error('帳號或密碼錯誤', 401); } Cache::delete($username); $user = Db::name('user') ->where('phone', $username) ->find(); if (!$user) { return $this->success('非會員', 201); } $payload = [ 'user_id' => $user['user_id'], ]; $token = Token::genToken($payload); // if(empty($user['uniqid'])){ // return $this->success(['uid'=>$user['user_id'],'token'=>'Bearer '.$token],202); // } return $this->success(['uid' => $user['user_id'], 'token' => 'Bearer ' . $token]); } /** * Line 登入 */ public function lineLogin() { $id_token = input('token'); $line_id = input('line_id'); $line_res = LineLogin::verifyIdToken(env('line.line_login_channel_id'), $id_token); if (!$line_res) { return $this->Error('發生錯誤,請重新執行', 401); } $user = Db::name('user') ->where('line_id', $line_res['sub']) ->find(); if (!$user) { return $this->success('非會員', 201); } $payload = [ 'id' => $user['id'], 'user_id' => $user['user_id'], ]; $token = Token::genToken($payload); // if(empty($user['uniqid'])){ // return $this->success(['uid'=>$user['user_id'],'token'=>'Bearer '.$token],202); // } return $this->success(['uid' => $user['user_id'], 'token' => 'Bearer ' . $token]); } public function checkPhone(){ $phone=input('phone'); $id_token = input('token'); $user = Db::name('user') ->where('phone',$phone) ->find(); if(!$user){ return $this->success('非會員',201); } if(strlen($user['line_id'])>0){ return $this->success('已綁定Line',202); } //更新Line資料 $line_res = LineLogin::verifyIdToken('1657876696', $id_token); if(!$line_res){ return $this->Error('發生錯誤,請重新執行',401); } $data = [ 'line_id'=>$line_res['sub'], 'line_name'=>$line_res['name'], 'create_time'=>date('Y-m-d H:i:s') ]; $avatar=isset($line_res['picture'])?$this->saveLineImage($line_res['picture'],$line_res['sub']):''; if(!empty($avatar)){ $data['line_picture']= getUrl().'/storage/'.$user['user_id'].'/'.$avatar; }else{ $data['line_picture']=''; } if(empty($user['avatar'])){ $data['avatar']=$data['line_picture']; } Db::name('user') ->where('phone',$phone) ->update($data); $payload = [ 'id' => $user['id'], 'user_id' => $user['user_id'], ]; $token = Token::genToken($payload); return $this->success(['uid' => $user['user_id'], 'token' => 'Bearer ' . $token]); } public function logout() { return $this->success('請求成功'); } public function checkToken() { $token = input('token'); $result = Token::check($token); if (!$result) { return $this->error('Token無效'); } return $this->success('請求成功'); } public function sendVerify() { $username = input('username'); //在這裡檢查是否已經發送過驗證碼,如果已經發送過,則不再發送 $verifyData = Cache::get($username); if ($verifyData) { if (time() - $verifyData['time'] < 60) { $countdown = 60 - (time() - $verifyData['time']); return $this->error(['countdown'=>$countdown], 201,'請求時間過短,請稍後再試'); } }else{ //清除舊的驗證碼 Cache::delete($username); } // 驗證碼不存在或已過期 // 重新生成驗證碼並存儲到Redis中 $verification_code = mt_rand(100000, 999999); $message = '[SlashCard]' . $verification_code . '簡訊登入驗證碼,請於5分鐘內輸入驗證碼完成登入。'; // 發送短信 $debug = env('asc.sms_disable'); $debug = false; if(!$debug){ Sms::createSms( 'smsking', [ 'recipient' => $username, 'message' => $message ] ); }else{ $verification_code = '123456'; } Cache::set($username, ['code' => $verification_code, 'time' => time()], 300); return $this->success('請求成功'); } private function saveLineImage($pictureUrl,$uid) { if($pictureUrl){ $curl = curl_init($pictureUrl); curl_setopt($curl,CURLOPT_RETURNTRANSFER,1); $imageData=curl_exec($curl); curl_close($curl); $filename=$uid."_line.jpg"; $filedir=$_SERVER['DOCUMENT_ROOT'].'/storage/'.$uid; if (!file_exists($filedir)) { mkdir($filedir , 0777 , true); } $fp=fopen($filedir.'/'.$filename,'a'); fwrite($fp,$imageData); fclose($fp); return $filename; }else{ return false; } } }