多說單點登錄(SSO)介紹(解決缺少client_id參數)

多說是目前用的最廣泛的一個社會化插件,同時也支持各主流網站的單點登錄。官方有詳細的開發文檔:
http://dev.duoshuo.com/docs/5023323ce9b7bde608000012

首先是設置

需要在多說評論的配置中加入sso相關參數

sso: {
    login: "/sso-login",//替換為你自己的回調地址
    logout: "/sso-logout"http://替換為你自己的回調地址
}

這樣,當用戶通過多說評論登錄你的網站后,就會調用http://你的站點地址/sso-login,同時將code參數傳遞過去。類似:http://wincn.net/sso-login?code=b96bd79a899c1f2e58baf10bdbd5a92f

添加登錄按鈕

這一點文檔中已經說得很明白了,在你的登錄頁面中加入

<div class="ds-login"></div>

系統會自動生成登錄按鈕


登錄按鈕

后臺如何解析?

那么后臺如何利用code進行用戶信息的解析呢?

文檔中提到,需要調用API:http://api.duoshuo.com/oauth2/access_token,這是一個post接口。將code參數以post的方式提交。

那么問題來了,根據官方的文檔提交后,卻得到了一下錯誤:

{
    "code":2,
    "errorMessage":"缺少client_id參數"
}

說是“缺少client_id參數”,但是文檔中并沒有提到client_id啊?真是捉急。

又反復看了幾遍文檔,發現官方給出了一個php的示例

好吧,我們打開示例,注意109行的$params參數。

$params = array(
     'client_id' => $this->shortName,
     'client_secret' => $this->secret,
);

雖然我不懂php,但是看代碼,應該能推斷出:shortName就是client_id!

shortName就是注冊多說時二級域名的唯一字符串,比如我的多說二級域名為:gefangshuai.duoshuo.com,那么gefangshuai就是shortName。
多說基本設置中有域名信息。

這次我們提交兩個參數:

{
    client_id: your_short_name,
    code: xxxxxxxxxxxx
}

終于,多說給我們返回了信息如下:

{
  "access_token": "xxxxxxxxxxxxx",
  "expires_in": 7776000,
  "user_id": "453802",
  "remind_in": 7775625,
  "code": 0
}

根據返回信息獲取用戶詳細信息

有了user_id,我們可以很輕松的通過接口http://api.duoshuo.com/users/profile.json?user_id=xxx獲取用戶的詳細信息了,這是一個Get接口。

代碼示例

以下是我用nodejs實現的部分代碼示例:

/**
 * 多說單點登錄
 */
router.get('/sso-login', function (req, res, next) {
    var code = req.query.code;
    var url = 'http://api.duoshuo.com/oauth2/access_token';
    superagent.post(url)
        .type('form')
        .accept('application/json')
        .send({
            client_id: config.site.duoshuo.short_name,
            code: code
        }).end(function (err, xhr) {
            if(err) {
                next(err);
            }else{
                var dsUser = xhr.body;
                 // 根據dsUser中的user_id信息,可以獲取用戶信息
            }
    });
});
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 原文出處:單點登錄原理與簡單實現 一、單系統登錄機制 1、http無狀態協議 web應用采用browser/ser...
    程式怪客閱讀 1,506評論 2 24
  • 這篇文章介紹了Mobile BI(移動商務智能)使用過程中涉及的各種身份認證的方式,主要目的是對這些方式的原理進行...
    雨_樹閱讀 2,060評論 1 2
  • [toc] 1 . 本地YUM源配置 關閉iptables : service iptables stop 配置i...
    雨中星辰0閱讀 430評論 0 0
  • 在香港讀書,大大小小的地方去了很多,可以說香港是一座讓你永遠不會覺得無聊的城市。但是待的時間久了,就不滿足于被“人...
    如孟閱讀 601評論 2 14