国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

nextcloud與oauth2集成教程

seasonley / 1999人閱讀

摘要:基礎環境安裝在官方應用商店下載解壓并拷貝至目錄打開并在應用中啟用配置使用管理員賬號打開找到設置,選擇并添加信息,如下設置只使用登錄,取消系統登錄編輯添加以下配置使用注銷使用中發現點擊登出后,只是注銷了本身的,并沒有注銷的,因此會登出失敗打開

基礎環境

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

相關文章

  • 【Microsoft Azure 的1024種玩法】四. 利用Azure Virtual machi

    摘要:它的客戶端覆蓋了等各種平臺,也提供了網頁端以及接口,所以你幾乎可以在各種設備上方便地訪問你的云盤。【簡介】 1.Azure Virtual machines是Azure 提供的多種可縮放按需分配計算資源之一,Nextcloud是一款開源免費的私有云存儲網盤項目,可以讓你快速便捷地搭建一套屬于自己或團隊的云同步網盤,從而實現跨平臺跨設備文件同步、共享、版本控制、團隊協作等功能。它的客...

    Corwien 評論0 收藏0
  • 17k Star!打造私人版的某度網盤,限速也不怕

    摘要:總的來說,適用于個人搭建家庭網盤,也適合大家公司內部私有云網盤。支持顯示消息狀態指示器舉手功能群組對話說明可折疊的視頻欄全屏屏幕共享。。參與維護萬的開源技術資源庫,包括等。 ...

    vincent_xyb 評論0 收藏0
  • Nextcloud個人云存儲絕佳選擇:一鍵自動安裝方法和云盤使用體驗

    搭建個人云存儲一般會想到ownCloud,堪稱是自建云存儲服務的經典。而Nextcloud是ownCloud原開發團隊打造的號稱是下一代存儲。初一看覺得口氣不小,剛推出來就重新定義了Cloud,真正試用過后就由衷地贊同這個Nextcloud:它是個人云存儲服務的絕佳選擇。 與ownCloud相比,Nextcloud的功能絲毫沒有減弱,甚至由于可以安裝云存儲服務應用,自制性更強,也更符合用戶的...

    Shisui 評論0 收藏0
  • 開源網盤系統nextcloud容器化部署

    一、Nextcloud簡介Nextcloud是一款開源免費的私有云存儲網盤項目,可以讓你快速便捷地搭建一套屬于自己或團隊的云同步網盤,從而實現跨平臺跨設備文件同步、共享、版本控制、團隊協作等功能。它的客戶端覆蓋了Windows、Mac、Android、iOS、Linux 等各種平臺,也提供了網頁端以及 WebDAV接口,所以你幾乎可以在各種設備上方便地訪問你的云盤。官網地址:https://nex...

    社區管理員 評論0 收藏0

發表評論

1條評論

wbh849875651

評論于2022-09-01 15:42

你好,對于sociallogin的一些配置有些問題想請教你,請問可以留個郵箱或者其他聯系方式嗎?
回復0 贊同0 刪除
最新活動
閱讀需要支付1元查看
<