给网站加第三方社交登陆的

原由

 接到个任务 须要微博,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;
    }
相关文章
相关标签/搜索