摘要:基礎環境安裝在官方應用商店下載解壓并拷貝至目錄打開并在應用中啟用配置使用管理員賬號打開找到設置,選擇并添加信息,如下設置只使用登錄,取消系統登錄編輯添加以下配置使用注銷使用中發現點擊登出后,只是注銷了本身的,并沒有注銷的,因此會登出失敗打開
基礎環境
Nextcloud 15.0.5
oauth2
安裝 sociallogin在官方app應用商店下載 sociallogin
解壓并拷貝 sociallogin 至 app 目錄
打開 Nextcloud 并在 應用中啟用
配置oauth2使用管理員賬號打開 Nextcloud 找到 sociallogin設置,選擇 Custom OAuth2 并添加oauth2信息,如下
設置只使用oauth2登錄,取消系統登錄
編輯 /var/www/html/config/config.php 添加以下配置:
"social_login_auto_redirect" => true使用Oauth2注銷 Nextcloud
使用中發現點擊登出后,Nextcloud只是注銷了本身的session,并沒有注銷oauth2的session,因此會登出失敗.
打開 core/Controller/LoginController.php 找到 logout 方法,修改 $response 值如下:
$response = new RedirectResponse("http://10.0.4.3/logout?redirect_uri=http://10.0.4.33:8088");
http://10.0.4.3/logout 為oauth2認證系統登出地址
使用用戶信息創建組在使用oauth2登錄成功后,為了與原有Nextcloud用戶區分,Nextcloud會在數據庫中創建一個用戶名為 oauth2 Internal name + 登錄名稱的用戶,這樣使用起來及其不方便,我們可以通過修改以下代碼,保證用戶名正常不帶前綴:
根據返回用戶信息中其他信息創建組
sociallogin/lib/Controller/LoginController.php
private function login($uid, Profile $profile) { $user = $this->userManager->get($uid); if (null === $user) { $connectedUid = $this->socialConnect->findUID($uid); $user = $this->userManager->get($connectedUid); } if ($this->userSession->isLoggedIn()) { if (!$this->config->getAppValue($this->appName, "allow_login_connect")) { throw new LoginException($this->l->t("Social login connect is disabled")); } if (null !== $user) { throw new LoginException($this->l->t("This account already connected")); } $currentUid = $this->userSession->getUser()->getUID(); $this->socialConnect->connectLogin($currentUid, $uid); return new RedirectResponse($this->urlGenerator->linkToRoute("settings.PersonalSettings.index", ["section" => "additional"])); } if (null === $user) { if ($this->config->getAppValue($this->appName, "disable_registration")) { throw new LoginException($this->l->t("Auto creating new users is disabled")); } if ( $profile->email && $this->config->getAppValue($this->appName, "prevent_create_email_exists") && count($this->userManager->getByEmail($profile->email)) !== 0 ) { throw new LoginException($this->l->t("Email already registered")); } $password = substr(base64_encode(random_bytes(64)), 0, 30); $user = $this->userManager->createUser($uid, $password); $user->setDisplayName($profile->displayName ?: $profile->identifier); $user->setEMailAddress((string)$profile->email); $newUserGroup = $this->config->getAppValue($this->appName, "new_user_group"); if ($newUserGroup) { try { $group = $this->groupManager->get($newUserGroup); $group->addUser($user); } catch (Exception $e) { } } if ($profile->photoURL) { $curl = new Curl(); try { $photo = $curl->request($profile->photoURL); $avatar = $this->avatarManager->getAvatar($uid); $avatar->set($photo); } catch (Exception $e) { } } $this->config->setUserValue($uid, $this->appName, "disable_password_confirmation", 1); if ($profile->data["departmentName"] !== null) { $existGroup = $this->groupManager->get($profile->data["departmentName"]); if ($existGroup === null) { $newGroup = $this->groupManager->createGroup($profile->data["departmentName"]); $newGroup->addUser($user); } else { $existGroup->addUser($user); } } } $this->userSession->completeLogin($user, ["loginName" => $user->getUID(), "password" => null]); $this->userSession->createSessionToken($this->request, $user->getUID(), $user->getUID()); if ($redirectUrl = $this->session->get("login_redirect_url")) { return new RedirectResponse($redirectUrl); } $this->session->set("last-password-confirm", time()); return new RedirectResponse($this->urlGenerator->getAbsoluteURL("/")); }
sociallogin/lib/Provider/CustomOAuth2.php
public function getUserProfile() { $profileFields = array_filter( array_map("trim", explode(",", $this->config->get("profile_fields"))), function ($val) { return !empty($val); } ); $profileUrl = $this->config->get("endpoints")->get("profile_url"); if (count($profileFields) > 0) { $profileUrl .= (strpos($profileUrl, "?") !== false ? "&" : "?") . "fields=" . implode(",", $profileFields); } $response = $this->apiRequest($profileUrl); if (!isset($response->identifier) && isset($response->id)) { $response->identifier = $response->id; } if (!isset($response->identifier) && isset($response->data->id)) { $response->identifier = $response->data->id; } if (!isset($response->identifier) && isset($response->user_id)) { $response->identifier = $response->user_id; } $data = new DataCollection($response); if (!$data->exists("identifier")) { throw new UnexpectedApiResponseException("Provider API returned an unexpected response."); } $userProfile = new UserProfile(); foreach ($data->toArray() as $key => $value) { if (property_exists($userProfile, $key)) { $userProfile->$key = $value; } } if (!empty($userProfile->email)) { $userProfile->emailVerified = $userProfile->email; } $attributes = new DataCollection($data->get("attributes")); $userProfile->data = [ "organizationName" => $attributes->get("organizationName"), "departmentName" => $attributes->get("departmentName"), ]; if ($attributes->get("name") !== null) { $userProfile->displayName = $attributes->get("name"); } return $userProfile; }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/31153.html
摘要:它的客戶端覆蓋了等各種平臺,也提供了網頁端以及接口,所以你幾乎可以在各種設備上方便地訪問你的云盤。【簡介】 1.Azure Virtual machines是Azure 提供的多種可縮放按需分配計算資源之一,Nextcloud是一款開源免費的私有云存儲網盤項目,可以讓你快速便捷地搭建一套屬于自己或團隊的云同步網盤,從而實現跨平臺跨設備文件同步、共享、版本控制、團隊協作等功能。它的客...
摘要:總的來說,適用于個人搭建家庭網盤,也適合大家公司內部私有云網盤。支持顯示消息狀態指示器舉手功能群組對話說明可折疊的視頻欄全屏屏幕共享。。參與維護萬的開源技術資源庫,包括等。 ...
搭建個人云存儲一般會想到ownCloud,堪稱是自建云存儲服務的經典。而Nextcloud是ownCloud原開發團隊打造的號稱是下一代存儲。初一看覺得口氣不小,剛推出來就重新定義了Cloud,真正試用過后就由衷地贊同這個Nextcloud:它是個人云存儲服務的絕佳選擇。 與ownCloud相比,Nextcloud的功能絲毫沒有減弱,甚至由于可以安裝云存儲服務應用,自制性更強,也更符合用戶的...
一、Nextcloud簡介Nextcloud是一款開源免費的私有云存儲網盤項目,可以讓你快速便捷地搭建一套屬于自己或團隊的云同步網盤,從而實現跨平臺跨設備文件同步、共享、版本控制、團隊協作等功能。它的客戶端覆蓋了Windows、Mac、Android、iOS、Linux 等各種平臺,也提供了網頁端以及 WebDAV接口,所以你幾乎可以在各種設備上方便地訪問你的云盤。官網地址:https://nex...
閱讀 4722·2021-11-15 11:39
閱讀 2691·2021-11-11 16:55
閱讀 2200·2021-10-25 09:44
閱讀 3504·2021-09-22 16:02
閱讀 2433·2019-08-30 15:55
閱讀 3122·2019-08-30 13:46
閱讀 2656·2019-08-30 13:15
閱讀 1944·2019-08-30 11:12