給網站加第三方社交登陸的

原由

 接到個任務 須要微博,QQ,百度,人人等聯合登陸。而後花了一天時間整理了一下,寫給你們分享下。javascript


 

想法:

1. 首先想到的是QQ登陸,跑到QQ互聯折騰了一下,註冊開發者哇,而後填寫應用信息哇,php

最後發現QQ登陸的域名不能有端口,服務器外網帶端口號的,而後就撤退了。html

 

2 轉戰百度開放者平臺,說實話這個平臺看的眼花繚亂的,雲存儲雲服務的,想到之前的bae,還覺得是百度的託管平臺似的。java

百度這裏面有個坑,中間有個第三方的登陸,一看還覺得是本身找的,而後點擊進去了。android

 

 

 看了下例子,android,ios,js,反正就是找不到web,汗!有個js的登陸例子,裏面用了些百度的JS,找找百度的JS庫,發現須要下載SDK,感受是客戶端東東,而後就算了從新搜索了。ios

 

 

 繼續bing搜索呢 ,此次搜到百度API裏面去了,打開網站就看到一段描述web

 

1、支持多家主流社交平臺帳號 
支持百度、新浪微博、騰訊微博、QQ、人人、開心網等多家平臺的帳號系統幫助用戶低成本登陸。 
2、最簡單化的接入帳號 
適用於PC&移動,只需簡單配置和調用,便可輕鬆搭建完成帳號功能。 

 

感受是本身想要的接口了,而後點進去又吐血了,又回到第二步的百度SDK例子了。json

 

 

而後繼續看了看這個百度API的網站 發現下面推薦服務 有個百度賬號鏈接有點像,而後點那個SDK與文檔進去看看文檔。api

 

 

而後找到了如下幾個重要文檔了。服務器

 

第三方接入網站社會化登錄

 


 

正式開發

有文檔了就開始忙活了,首先想到的是調試,而後想到了花生殼,而後去花生殼官網,恰好看到了內網映射一塊錢支付免費用。

而後就下了客戶端 配了本機映射,開始寫代碼咯。

對着這個一步步的作,這裏有有個坑了,百度的指南是2.0版本的,如今3.0了有些地方不同。不過好在只是界面不同,編碼流程是不變的。

1.進百度開發者服務 建立工程

2.這裏寫你的網站名字,而後勾選合做網站,解決方案bae不要勾選。

3.以上2步就已經把網站接入到bae了,而後點擊應用,進入應用設置,設置一下網站的描述,這樣用戶跳轉的時候會有對該網站的有好描述

4.設置社會化服務回調地址,跟指南第二步同樣的寫就行了,這裏的地址寫花生殼解析的外網地址,不過跟官網文檔不同的就是,設置的位置變了。

5 託管第三方應用

讓百度託管 QQ 微博 開心 人人等登陸設置,這裏簡單使用的話,默認的就能夠了,讓百度給咱們作好了集成,若是不用默認的話,本身就要去各個平臺去創建APP,拿到API KEY啥的。一個個作關聯。

6 用JS登陸獲取受權碼

下面有個注意的  

redirect_uri 必須和你第四步後臺應用設置的同樣 否則會報錯
domid  這個是一個ID值,對應的是你界面方登陸圖標的容器元素的 id
   <script type="text/javascript" id="bd_soc_login_boot"></script>
    <script type="text/javascript">
    (function(){
          var t = new Date().getTime(),
          script = document.getElementById("bd_soc_login_boot"),
          redirect_uri = encodeURIComponent("http://xxx.eicp.net/xxxxx/other-login"),
          domid = "login", 
          src = "http://openapi.baidu.com/social/oauth/2.0/connect/login?redirect_uri=" + redirect_uri + "&domid=" + domid + "&client_type=web&response_type=code&media_types=sinaweibo%2Cqqdenglu%2Cbaidu%2Cqqweibo%2Ckaixin%2Crenren&size=-1&button_type=4&client_id=xxxxxxxxx&view=embedded&t=" + t;
        script.src = src;
    })();
    </script>

 這個樣式的設置地址在下圖。

6 下一步就是根據獲得的CODE來POST請求獲取用戶的實際信息了,例子是PHP代碼,JAVA的處理方法也差很少只是語法不同。

我這裏有部分JAVA 僞代碼給參考下

設計思想:

對原有用戶表的一個擴充,加入了一個第三方登陸綁定表(用戶表ID,平臺類別,平臺主鍵,平臺用戶名,訪問受權碼)等。

當登陸的時候 首先查詢平臺主鍵是否有關聯用戶表ID 若是有 查詢出用戶表ID 而後調用正常的登陸方法

若是沒有,就新增用戶,而後繼續調用正常的登陸方法

 

@SkipCheck
    @Action("other-login")
    public String OtherLogin() throws Exception {
        String result = HttpKit.get(OtherLoginContent.url, getParam());
        log.info(result);
        JSONObject map = com.alibaba.fastjson.JSON.parseObject(result);
        
        log.info(map.get("name"));
        //首先查詢是否綁定
        String customerNo = customerDao.selectOtherLogin(map.getString("social_uid"));
        if(customerNo==null){
            //若是沒有 用social_uid+name等當用戶名自動添加用戶 
            //而且自動關聯綁定
            customerNo=customerService.addOtherLink(map);
        }
        customer = customerDao.selectById(customerNo);
        return loginCheck();//正常的登陸流程
    }
    private Map<String,String > getParam(){
        String code =  getParam("code");
        Map<String,String > param = new HashMap<String,String>();
        param.put("grant_type", "authorization_code");//固定
        param.put("code", code);
        param.put("client_id", OtherLoginContent.client_id);
        param.put("client_secret", OtherLoginContent.client_secret);
        param.put("redirect_uri",OtherLoginContent.redirect_uri);
        return param;
    }
相關文章
相關標籤/搜索