免注册登陆以及QQ登陆

(一)QQ登陆

(1)基本调用过程分析:

①生成授权连接,需要配置回调地址
https://graph.qq.com/oauth2.0/authorize?response_type=code&
client_id=xxxxxxxx&redirect_uri=http://127.0.0.1:8080/mobile/qqLoginCallback&
state=1234656
②通过授权码换取assessToken,配置回调地址
https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&
client_id=xxxxxxxx&client_secret=xxxxxxxx
&redirect_uri=http://127.0.0.1:8080/mobile/qqLoginCallback
③使用assessToken换取openid
https://graph.qq.com/oauth2.0/me?access_token=xxxxxxxx
④使用openid和assessToken获取用户信息和openid
https://graph.qq.com/user/get_user_info?
access_token=xxxxxxxx&
oauth_consumer_key=12345&
openid=xxxxx

(2)代码:

①准备工作:

下载官方demo:   qqConnect_Server_SDK_java_v2.0 

将qqconnectconfig.properties保存到resources目录下,

②用户点击QQ登录链接请求地址:

@RequestMapping("/QQLogin")
	public String localQQLogin(HttpServletRequest request) throws QQConnectException{
		String authorizeURL = new Oauth().getAuthorizeURL(request);
		return "redirect:" + authorizeURL;
	}

③跳转到授权页面后点击确认登录回调地址

@RequestMapping("/qqLoginCallback")
	public String qqLoginCallback(HttpServletRequest request, HttpSession httpSession, HttpServletResponse response) {
		try {
			//获取授权码code,已经在request中
			//直接传递request,利用已经封装好的代码请求获得accessToken
			AccessToken accessTokenObj = new Oauth().getAccessTokenByRequest(request);
			if(accessTokenObj == null) {
				return setErrorMsg(request, "qq授权失败!", "error");
			}
			String accessToken = accessTokenObj.getAccessToken();
			if(StringUtils.isEmpty(accessToken)) {
				return setErrorMsg(request, "qq授权失败!", "error");
			}
			//根据accessToken获取openid
			OpenID openIdObj = new OpenID(accessToken);
			String userOpenId = openIdObj.getUserOpenID();
			/**
			 *  根据openid去db查看是否已经存在关联的用户
			 *  	若存在那么直接登陆
			 *  	否则跳到管理用户界面
			 */
			Map<String, Object> openIdMap = userFeign.findLogin(userOpenId);
			Integer code = (Integer) openIdMap.get(BaseApiConst.HTTP_CODE_NAME);
			// 判断是否绑定会员
			if (code.equals(BaseApiConst.HTTP_200_CODE)) {
				// 已经授权过,自动登录
				String token = (String) openIdMap.get("data");
				CookieUtil.addCookie(response, Const.USER_TOKEN, token,
						Const.WEBUSER_COOKIE_TOKEN_TERMVALIDITY);
				return "index";
			}
			// 没有绑定openid,跳转到绑定账户页面(绑定已有账户或者去新注册账户)
			httpSession.setAttribute("openid", userOpenId);
		} catch (Exception e) {
		}
		return "bindaccount";
	}

③用户之前没有注册,那么调到绑定账户页面。两个选择绑定账号或者注册新账号,需要注意账号关联openid.


(二)手机号免注册登陆
①登陆接口由两种类型:用户名和密码  手机号
②用户输入手机号以及校验码后把信息传送给后台,后台服务判断登陆方式是哪种
③若用户密码,手机号都有那么走用户密码登录,否则走手机号登录。
④根据手机号从数据库查询获取数据。
    若数据为空,那么实现自动注册功能。
    若数据非空,那么修改信息(最后一次登录时间)
⑤登录成功后赋予用户权限
⑥写入session

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值