public static function get_token4member_id($member_id, $provider_id) { if (!is_int($provider_id)) { $provider_id = Model_OauthProvider::get_id($provider_id); } if (!$provider_id) { throw new InvalidArgumentException('Second parameter is invalid.'); } $obj = self::query()->where('member_id', $member_id)->where('oauth_provider_id', $provider_id)->get_one(); if (!$obj) { return false; } return $obj->token; }
public function provider_signup($provider, $response = null) { $service_name = isset($response['auth']['info']['name']) ? $response['auth']['info']['name'] : $response['auth']['info']['nickname']; $input = array('uid' => (string) $response['auth']['uid'], 'token' => $response['auth']['credentials']['token'], 'service_name' => $response['auth']['info']['name']); if (!empty($response['auth']['credentials']['expires'])) { $input['expires'] = strtotime($response['auth']['credentials']['expires']); } if ($service_url = $this->get_service_url($provider, $response)) { $input['service_url'] = $service_url; } try { $member_oauth = Model_MemberOauth::forge(); $val = Validation::forge('provider_signup'); $val->add_model($member_oauth); $val->fieldset()->field('member_id')->delete_rule('required'); if (!$val->run($input)) { throw new \FuelException($val->show_errors()); } $input = $val->validated(); $provider_id = Model_OauthProvider::get_id($provider); \DB::start_transaction(); $member = Model_Member::forge(); $member->name = str_replace(' ', '', $input['service_name']); list($member->sex, $member->sex_public_flag) = Site_Oauth::get_sex($response, $provider); list($member->birthyear, $member->birthyear_public_flag) = Site_Oauth::get_birthyear($response, $provider); list($member->birthday, $member->birthday_public_flag) = Site_Oauth::get_birthday($response, $provider); $member->filesize_total = 0; $member->register_type = $provider_id; if ($member->save() === false) { throw new \FuelException('Member save failed.'); } $member_oauth->member_id = $member->id; $member_oauth->oauth_provider_id = $provider_id; $member_oauth->uid = $input['uid']; $member_oauth->token = $input['token']; $member_oauth->secret = $input['secret']; $member_oauth->service_name = $input['service_name']; if (!empty($input['expires'])) { $member_oauth->expires = $input['expires']; } if (!empty($input['service_url'])) { $member_oauth->service_url = $input['service_url']; } if ($member_oauth->save() === false) { throw new \FuelException('Oauth data save failed.'); } if (!empty($response['auth']['info']['email'])) { Model_Memberauth::save_email($response['auth']['info']['email'], $member->id); } if (conf('auth.oauth.saveTermsUnAgreement')) { Model_MemberConfig::set_value($member->id, 'terms_un_agreement', 1); } // timeline 投稿 if (is_enabled('timeline')) { \Timeline\Site_Model::save_timeline($member->id, null, 'member_register', $member->id, $member->created_at); } \DB::commit_transaction(); if (!empty($response['auth']['info']['image'])) { $this->save_profile_image($response['auth']['provider'], $response['auth']['info']['image'], $member); } } catch (\FuelException $e) { if (\DB::in_transaction()) { \DB::rollback_transaction(); } if (conf('auth.oauth.log.isOutputErrorLog.provider_signup')) { \Util_Toolkit::log_error('OAuth provider_signup error: ' . isset($e) ? $e->getMessage() : ''); } return $this->login_failed(); } $this->force_login($member->id); if (conf('auth.oauth.forceSetRememberMe')) { Auth::remember_me(); } return $this->login_succeeded(); }