php 整合 微博登录
现在很多网站都整合了便捷的第三方登录,如QQ登录、新浪微博、搜狐、网易等,为用户提供不少方便和节约时间。我们可以选择使用JS或SDK实现第三方提供用户授权API,本文主要讲解 JAVA SDK 新浪微博登录授权以及获取用户资料。
注:本例子使用的是 SpringMVC,所以若想拷贝代码直接使用则需自己提前搭建好环境。
1、首先申请新浪微博网站接入:http://open.weibo.com/wiki/
2、成为开发者得到App Key和App Secret
3、下载weibo4j-oauth2:http://code.google.com/p/weibo4j/downloads/list
4、编写获取用户信息代码,搞定!
下载解压后,将src目录下weibo4j文件夹以及config.properties拷贝至自己 JAVA WEB 项目的src目录下。
编辑config.properties配置文件,改成成自己的资料。第一个填写你申请的App Key值,第二个填写App Secret值。
|
1
2
3
|
client_ID =
client_SERCRET =
redirect_URI =
|
第三个redirect_URI,是你的重定向后的网址。应该对应一个控制器(Spring Controller)或 Servlet。在这里我们需要两个网址,第一个网址即用户在页面上点击的网址,能跳转到新浪微博账号登录界面,当用户点击账号登陆界面的登录按钮时,新浪微博会去校验资料正确性,一旦资料正确将会以 get 方式请求并且携带参数code重定向到你填写的redirect_URI,此时就能获取用户的资料了。
以小明博客为例,首先用户点击 http://www.bugxm.com/user/login-sian-weibo.html,我们接收请求后主要工作是重定向到新浪微博登录页面。代码片段如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/**
*
* 新浪微博登录界面
*
* @param session
* @return
* @throws WeiboException
*/
@RequestMapping(value = "/user/login-sian-weibo.html", method = RequestMethod.GET)
public String loginSinaWeibo(HttpServletRequest request, HttpSession session)
throws WeiboException {
session.setAttribute("login_current_url", request.getHeader("Referer"));
weibo4j.Oauth oauth = new weibo4j.Oauth();
String url = oauth.authorize("code", "");
return "redirect:" + url;
}
|
代码片段中的session是为了获取用户登录前所在页面URL,方便登录完后重定向到登录之前的页面。其中url是新浪微博登录界面网址,我们只需要重定向过去就行了。
当用户在新浪微博登录成功后,会重定向到我们刚才填写的redirect_URI中,如我填写的 http://www.bugxm.com/user/login-sina-weibo.do,对应逻辑代码片段如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
/**
*
* 新浪微博登录操作
*
* @param session
* @return
* @throws WeiboException
*/
@RequestMapping(value = "/user/login-sina-weibo.do", method = RequestMethod.GET)
public String loginSinaWeiboAction(HttpSession session,
@RequestParam String code) throws WeiboException {
String url = (String) session.getAttribute("login_current_url");
session.removeAttribute("login_current_url");
User user = userService.sinaWeiboLoginAction(code,
(User) session.getAttribute("user"));
if (null != user) {
session.setAttribute("user", user);
}
return "redirect:" + url;
}
|
重定向过来会携带code参数我们把值取到用来获取用户的资料。本段代码中的除code、sinaWeiboLoginAction()外都是次要,对本文主题而言可有可无。我们来看看sinaWeiboLoginAction()代码片段:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
/**
* 新浪微博操作
*
* @param code
* @param currentLoginUser
* 当前登录用户,可为 null
* @return
* @throws WeiboException
*/
public User sinaWeiboLoginAction(String code, User currentLoginUser)
throws WeiboException {
weibo4j.Oauth oauth = new weibo4j.Oauth();
weibo4j.http.AccessToken accessToken = oauth.getAccessTokenByCode(code);
String uid = accessToken.getUserUid();
weibo4j.Users users = new weibo4j.Users();
users.client.setToken(accessToken.getAccessToken());
weibo4j.model.User user = users.showUserById(uid);
String userDomain = user.getUserDomain(); // 用户登录名
String username = user.getScreenName(); // 用户呢称
String avatar = user.getAvatarLarge(); // 用户头像
String gender = null; // 性别
if ("m".equals(user.getGender())) {
gender = "男";
} else if ("f".equals(user.getGender())) {
gender = "女";
} else {
gender = "未知";
}
// …… 业务逻辑操作,代码略
return currentLoginUser;
}
|
其中String uid = accessToken.getUserUid();的getUserUid()方法本身是没有的,我们需要修改新浪微博的源代码,不然取uid非常麻烦。
编辑/src/weibo4j.http/AccessToken.java,在:
|
1
2
3
|
public String getRefreshToken() {
return refreshToken;
}
|
下面添加:
|
1
2
3
|
public String getUserUid() {
return uid;
}
|
到此就搞定了。用户的其它资料已经很详细的注释在/src/weibo4j/model/User.java中了。
php 整合 微博登录的更多相关文章
- django 注册、登录及第三方接口程序(4):扩展邮箱注册,登录,微博登录
1.邮箱注册 这里需要扩展User,两种解决办法,1,注册时将email字段内容赋给username,这种瞒天过海型的,另一种就是扩展user,这里介绍django1.5的扩展方法. 1.settin ...
- 如何从零开始对接第三方登录(Java版):QQ登录和微博登录
前言 个人网站最近增加了评论功能,为了方便用户不用注册就可以评论,对接了QQ和微博这2大常用软件的一键登录,总的来说其实都挺简单的,可能会有一点小坑,但不算多,完整记录下来方便后来人快速对接. 后台设 ...
- PHP调用微博接口实现微博登录的方法示例
在平时项目开发过程中,除了注册本网站账号进行登录之外,还可以调用第三方接口进行登录网站.这里以微博登录为例.微博登录包括身份认证.用户关系以及内容传播.允许用户使用微博帐号登录访问第三方网站,分享内容 ...
- PHP/ThinkPHP5 框架集成微博登录入库流程示意
PHP/ThinkPHP5 框架集成微博登录入库流程示意 第三方登陆这个东东,目前主要是 微信.微博.qq.淘宝.支付宝 等几个.他们都是基于oath2协议的.原理差不多.这里记录的是我测试的新郎微博 ...
- DRF接入Oauth2.0认证[微博登录]报错21322重定向地址不匹配
DRF接入Oauth2.0认证[微博登录]报错21322重定向地址不匹配 主题自带了微博登陆接口,很简单的去新浪微博开放平台创建了网页应用,然后把APP ID和 AppSecret填好后,以为大功告成 ...
- dedecms织梦第三方登录插件-QQ登录、微博登录、微信登录
织梦程序集成第三方QQ登录.微博登录.微信登录,获取QQ.微博.微信,并存储至数据库,一键注册为网站会员,不用再次填写绑定信息,方便粘贴用户更强. 织梦第三方登录效果 第三方登录插件特点 1.所有文件 ...
- php第三方登录(微博登录,仿照慕课网)
https://www.cnblogs.com/haoyu521/p/5606931.html 1:开发之前,请大家先自行熟悉一下OAuth协议原理. 2:我们开发需要具备一个外网可访问的线上域名,如 ...
- spring security整合QQ登录
最近在了解第三方登录的内容,尝试对接了一下QQ登录,此次记录一下如何实现QQ登录的过程,在这个例子中是和spring secuirty整合的,不整合spring secuirty也是一样的. 需求: ...
- struts2+hibernate整合-实现登录功能
最近一直学习struts2+hibernate框架,于是想把两个框架整合到一起,做一个小的登录项目.其他不多说,直接看例子. 1).Struts2 和hibernate的环境配置 包括jar包.web ...
随机推荐
- 批处理备份mysql数据
客户服务器,需要每天定时备份数据库,没办法,bat走起! 代码如下: @echo off C: cd C:\***\***\mysql\bin set Ymd=%date:~,4%%date:~5,2 ...
- Java获取路径的方法分析详解(Application/Web)
1.利用System.getProperty()函数获取当前路径: System.getProperty("user.dir");//user.dir用户当前的工作目录,输出:D: ...
- setlocale 与 mbstowcs 的问题
C++的字符串转换函数mbstowcs使用时容易产生bug... rapidxml_utils.hpp 的file(const char*filename)函数内会异常宕机... 需要在函数最开始添加 ...
- UICollectionView专题
什么是UICollectionView UICollectionView是一种新的数据展示方式,简单来说可以把他理解成多列的UITableView(请一定注意这是UICollectionView的最最 ...
- Android开发常见的Activity中内存泄漏及解决办法
上一篇文章楼主提到由Context引发的内存泄漏,在这一篇文章里,我们来谈谈Android开发中常见的Activity内存泄漏及解决办法.本文将会以“为什么”“怎么解决”的方式来介绍这几种内存泄漏. ...
- sublime去除空白行和重复行
去除空白行 edit -> line -> delete blank lines 去除重复行 打开正则模式 1 edit-> sort lines 2 command+option+ ...
- jmeter3.x的jtx文件解析
jtl保存测试结果 打开jtl文件,内容为下: timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,suc ...
- 2016.6.21 maven使用cmd新建项目时,failed to execute goal org.apache.maven.plugins:maven-archetye-plugin:2.4:generate...
在学习maven的时候,想要新建一个maven工程,在命令行执行create或generate命令. 错误如图所示: failed to execute goal org.apache.maven.p ...
- 出自 HTML4 规范的可用颜色字符串值列表(常用颜色名称及对应的十六进制值)
据称由于 HTML5 没有修改专属的颜色,HTML4 的颜色都可以在 HTML5 中正确显示. 出自 HTML4 规范的可用颜色字符串值列表如下,此表来源是 http://www.lovean.com ...
- C++PE文件格式解析类(轻松制作自己的PE文件解析器)
PE是Portable Executable File Format(可移植的运行体)简写,它是眼下Windows平台上的主流可运行文件格式. PE文件里包括的内容非常多,详细我就不在这解释了,有兴趣 ...