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 ...
随机推荐
- Spring MVC 学习
一.基础 Spring MVC是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高.Spring 3.0更加完善,实现了对Struts 2的超越.现在 ...
- hdu1420(C++)
数论中模的运算: a*b%n=(a%n)*(b%n)%c; (a+b)%n=(a%n+b%n)%n; 幂的模:A^n%c=r 于是A^(n+1)%c=A*r%c; #include<ios ...
- VS2010 MFC中 使用CListCtrl的排序功能
list 控件是creat的,不是拖在对话框上的.想使用CListCtrl的排序功能却犯了愁~~~ 还好找到方法,如下: .h文件里:afx_msg void OnLvnColumnclickList ...
- POJ 2128:Highways
Highways Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 2730 Accepted: 1008 Specia ...
- HDU - 1686 Oulipo KMP匹配运用
id=25191" target="_blank" style="color:blue; text-decoration:none">HDU - ...
- Windows下ELK-5.4.3环境搭建
Windows下ELK-5.4.3环境搭建 一.概述 ELK官网 https://www.elastic.co ELK由Elasticsearch.Logstash和Kibana三部分组件组成: El ...
- .NET创建宿主设计器--DesignHost、DesignSurface.
一个窗口在运行时,是这样的: 但是,在设计时,却远比这复杂的多,它需要一个设计器对象:它仅存在于设计时,并连接到运行时存在的对象. 宿主容器 我们可以看到每个窗体和按钮均有与之相关的设计器.这两个 ...
- Android 开发程序员必备网站
开发必备网站: Android 开发各种工具下载 Android 开发国内大牛集合 Android 开发技术博客周刊 Android 开发技术周报中文版 Android 优秀开源项目集合以及源码分析 ...
- 跳转前暂停几秒js如何实现
jquery如何实现跳转前暂停几秒 今天有个需求,类似答题的,需要显示结果后再跳转. 此处直接通过settimeout实现. 代码如下: url = 'www.baidu.com'; setTimeo ...
- 【Python】列表~深入篇
列表是一列按特定顺序排列的元素组成. 在Python中,用方括号[]来表示列表 下面是一个语言列表 Language = ['Chinese','English','Franch','Deutsch' ...