第三方登录-[微博、微信、qq] java实现

为了增加用户体验,用户能够快速的注册登录,第三方账号进行登录注册的的需求也就由此而诞生

 

AppID申请流程:

Android以及iOS新浪微博开放平台申请流程 - ShareSDK - Mob官方论坛 - Powered by Discuz!

微信开放平台申请流程 - ShareSDK - Mob官方论坛 - Powered by Discuz!

QQ appid申请 - ShareSDK - Mob官方论坛 - Powered by Discuz!

 

1、qq登录
 1)qq互联创建应用
接入QQ登录前,网站需首先进行申请,获得对应的appid与appkey,以保证后续流程中可正确对网站与用户进行验证与授权。


申请appid和appkey的用途


 appid :应用的唯一标识。在OAuth2.0认证过程中,appid的值即为oauth_consumer_key的值。


appkey:appid对应的密钥,访问用户资源时用来验证应用的合法性。在OAuth2.0认证过程中,appkey的值即为oauth_consumer_secret的值。


申请地址: http://connect.qq.com/intro/login/


 2)查看QQ提供的接口,写java代码

 

public void qq() {
        try {
            response.sendRedirect("https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id="
                    + ShareLoginDict.QQKEY.getState()
                    + "&redirect_uri="
                    + ShareLoginDict.QQURL.getState() + "&scope=get_user_info");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
@Override
    public Result userqq(String return_code) {
        Result result = new Result();
        Map<String, Object> token = (Map<String, Object>) QQAPI
                .getToken(return_code);
        if (token != null && token.get("access_token") != null) {
            Map<String, Object> tokenme = (Map<String, Object>) QQAPI
                    .getTokenMeOpenId(token.get("access_token").toString());
            if (tokenme != null && tokenme.get("openid") != null) {
                Map<String, Object> user = (Map<String, Object>) QQAPI
                        .getQqUser(token.get("access_token").toString(),
                                tokenme.get("openid").toString());
                if (user != null) {
                    result.addModel("openid", tokenme.get("openid"));
                    result.addModel("nickname", user.get("nickname"));
                    result.addModel("figureurl", user.get("figureurl"));
                    result.addModel("data", "data_success");
                }else{
                    result.addModel("data", "data_null");
                }
            }else{
                result.addModel("data", "data_null");
            }
 
        }else{
            result.addModel("data", "data_null");
        }
        return result;
    }

 

 

 

 

 

当用户通过QQ登录时,调用QQ接口获取用户接口返回QQ端的openid,昵称,头像;

然后将此信息存入到浏览器的cookie中,当用户浏览其他信息时,辨别如果是用户是用微信登录的,拦截器直接从cookie中获取用户的信息显示昵称和头像,并同时判断该openid是否和数据库中用户做绑定,如果没有绑定提示用户注册。

 

2、微信登录
 1) 微信登录也是最坑人的,需要花300大洋成为开发者账户,没办法谁让微信用户群体大呢所以也就只好认了;然后登录网站后台需要创建网站应用,填写授权回调域(登录网站的域名)只填写域名即可
申请地址: https://open.weixin.qq.com/cgi-bin/index?t=home/index&lang=zh_CN
 2)查看微信提供的接口,写java代码

 

public void wx() {
        try {
            response.sendRedirect("https://open.weixin.qq.com/connect/qrconnect?appid="
                    + ShareLoginDict.WEIXINKEY.getState()
                    + "&redirect_uri="
                    + URLEncoder.encode(ShareLoginDict.WEIXINURL.getState()) 
                    + "&response_type=code&scope=snsapi_login&state=66666#wechat_redirect");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
	@Override
	public Result userwx(String return_code) {
	    Result result = new Result();
	    Map<String, Object> token = (Map<String, Object>) WeiXinAPI.getToken(return_code);
	    if (token != null && token.get("access_token") != null) {
	        Map<String, Object> user = (Map<String, Object>) WeiXinAPI.getWxUser(token.get("access_token").toString(), token.get("openid").toString());
	        if (user != null) {
	            result.addModel("openid", user.get("openid"));
	            result.addModel("nickname", user.get("nickname"));
	            result.addModel("headimgurl", user.get("headimgurl"));
	            result.addModel("data", "data_success");
	        }else{
	            result.addModel("data", "data_null");
	        }
	    }else{
	        result.addModel("data", "data_null");
	    }
	    return result;
	}


当用户通过微信登录时,调用微信接口获取用户接口返回微信端的openid,昵称,头像;

 

然后将此信息存入到浏览器的cookie中,当用户浏览其他信息时,辨别如果是用户是用微信登录的,拦截器直接从cookie中获取用户的信息显示昵称和头像,并同时判断该openid是否和数据库中用户做绑定,如果没有绑定提示用户注册。


3 微博登录
 1)微博创建应用
  申请地址:http://open.weibo.com/authentication
 2)查看微博提供的接口,写java代码

 

public void wb() {
        try {
            response.sendRedirect("https://api.weibo.com/oauth2/authorize?client_id="
                    + ShareLoginDict.WEIBOKEY.getState()
                    + "&redirect_uri="
                    + ShareLoginDict.WEIBOURL.getState()
                    + "&response_type=code");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
@Override
    public Result userwb(String return_url, String return_code) {
        Result result = new Result();
        Map<String, Object> token = (Map<String, Object>) WeiBoAPI.getToken(
                return_url, return_code);
        if (token != null && token.get("access_token") != null) {
            Map<String, Object> user = (Map<String, Object>) WeiBoAPI
                    .getWbUser(token.get("access_token").toString(),
                            token.get("uid").toString());
            if (user != null) {
                result.addModel("name", user.get("screen_name"));
                result.addModel("pic", user.get("avatar_large"));
                result.addModel("idstr", user.get("idstr"));
                result.addModel("data", "data_success");
            }else{
                result.addModel("data", "data_null");
            }
        }else{
            result.addModel("data", "data_null");
        }
        return result;
    }


当用户通过微博登录时,调用微博接口获取用户接口返回微博端的idstr,昵称,头像;

 

然后将此信息存入到浏览器的cookie中,当用户浏览其他信息时,辨别如果是用户是用微信登录的,拦截器直接从cookie中获取用户的信息显示昵称和头像,并同时判断该openid是否和数据库中用户做绑定,如果没有绑定提示用户注册。

 

 

 

 

 

 

 

 

 

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在 SpringBoot 前后端分离项目中实现微信第三方登录需要以下步骤: 1. 注册微信开放平台账号,创建应用,获取 AppID 和 AppSecret。 2. 在前端页面中调用微信授权登录 API,获取到用户授权后得到的 code。 3. 将 code 发送到后端后端通过调用微信 API 获取 access_token 和 openid。 4. 根据 openid 查询用户是否已经注册,如果已经注册则直接登录,否则需要跳转到注册页面。 5. 注册用户时需要获取用户的昵称、头像等信息,可以通过调用微信 API 获取。 6. 登录成功后需要生成 token 并返回给前端,前端将 token 存储在本地,后续请求需要携带该 token。 下面是一个示例代码: 1. 前端页面调用微信授权登录 API ```javascript function wechatLogin() { window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=<AppID>&redirect_uri=<Redirect_URI>&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"; } ``` 2. 后端获取 access_token 和 openid ```java String code = request.getParameter("code"); String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appId + "&secret=" + appSecret + "&code=" + code + "&grant_type=authorization_code"; JSONObject jsonObject = HttpUtil.getJson(url); String accessToken = jsonObject.getString("access_token"); String openId = jsonObject.getString("openid"); ``` 3. 根据 openid 查询用户是否已经注册 ```java User user = userService.getUserByOpenId(openId); if (user == null) { // 跳转到注册页面 } else { // 直接登录 } ``` 4. 注册用户并获取用户信息 ```java String userInfoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + accessToken + "&openid=" + openId + "&lang=zh_CN"; JSONObject userInfo = HttpUtil.getJson(userInfoUrl); String nickname = userInfo.getString("nickname"); String avatarUrl = userInfo.getString("headimgurl"); // 注册用户并返回用户信息 ``` 5. 生成 token 并返回给前端 ```java String token = JwtUtil.createToken(user.getId()); return Result.success(token); ``` 需要注意的是,微信授权登录的 API 需要在微信客户端中打开,否则会提示“该链接无法访问”。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值