✅P224_商城业务-认证服务-社交登录测试成功
2024/2/14大约 3 分钟
认证服务-远程调用会员模块社交登录
远程服务接口编写
cfmall-auth-server/src/main/java/com/gyz/cfmall/feign/MemberFeignService.java
@FeignClient("cfmall-member")
public interface MemberFeignService {
//省略其它代码
/**
* Gitee登录
* @param socialUser
* @return
* @throws Exception
*/
@PostMapping(value = "/member/member/oauth2/login")
R oauthLogin(@RequestBody SocialUser socialUser) throws Exception;
/**
* 微博登录
* @param weiboUser
* @return
* @throws Exception
*/
@PostMapping(value = "/member/member/oauth2/weibo/login")
R oauth2Login(@RequestBody WeiboUser weiboUser) throws Exception;
}
MemberResponseVo
拷贝memberEntity的属性,
cfmall-common/src/main/java/com/gyz/common/vo/MemberResponseVo.java
package com.gyz.common.vo;
import lombok.Data;
import lombok.ToString;
import java.io.Serializable;
import java.util.Date;
@ToString
@Data
public class MemberResponseVo implements Serializable {
private static final long serialVersionUID = 5573669251256409786L;
private Long id;
/**
* 会员等级id
*/
private Long levelId;
/**
* 用户名
*/
private String username;
/**
* 密码
*/
private String password;
/**
* 昵称
*/
private String nickname;
/**
* 手机号码
*/
private String mobile;
/**
* 邮箱
*/
private String email;
/**
* 头像
*/
private String header;
/**
* 性别
*/
private Integer gender;
/**
* 生日
*/
private Date birth;
/**
* 所在城市
*/
private String city;
/**
* 职业
*/
private String job;
/**
* 个性签名
*/
private String sign;
/**
* 用户来源
*/
private Integer sourceType;
/**
* 积分
*/
private Integer integration;
/**
* 成长值
*/
private Integer growth;
/**
* 启用状态
*/
private Integer status;
/**
* 注册时间
*/
private Date createTime;
/**
* 社交登录UID
*/
private String socialUid;
/**
* 社交登录TOKEN
*/
private String accessToken;
/**
* 社交登录过期时间
*/
private long expiresIn;
}
登录接口
cfmall-auth-server/src/main/java/com/gyz/cfmall/controller/OAuth2Controller.java
微博接口
@Resource
private MemberFeignService memberFeignService;
/**
* 微博授权登录
* @param code
* @param session
* @return
* @throws Exception
*/
@GetMapping("/oauth/weibo/success")
public String weibo(@RequestParam("code") String code, HttpSession session) throws Exception {
Map<String, String> headers = new HashMap<>();
Map<String, String> querys = new HashMap<>();
querys.put("client_id", "318019123");
querys.put("client_secret", "3ac160febeab7e1bc959b4820b04512d");
querys.put("grant_type", "authorization_code");
querys.put("redirect_uri", "http://auth.cfmall.com/oauth/weibo/success");
querys.put("code", code);
Map<String, String> bodys = new HashMap<>();
HttpResponse response = HttpUtils.doPost("https://api.weibo.com", "/oauth2/access_token", "post", headers, querys, bodys);
if (response.getStatusLine().getStatusCode() == 200) {
//状态响应码为200则为成功
String json = EntityUtils.toString(response.getEntity());
WeiboUser weiboUser = JSON.parseObject(json, new TypeReference<WeiboUser>() {
});
System.out.println(weiboUser);
//知道了哪个社交用户
//1)、当前用户如果是第一次进网站,自动注册进来(为当前社交用户生成一个会员信息,以后这个社交账号就对应指定的会员)
//登录或者注册这个社交用户
System.out.println(weiboUser.getAccess_token());
//调用远程服务
R oauthLogin = memberFeignService.oauth2Login(weiboUser);
if (oauthLogin.getCode() == 0) {
MemberResponseVo data = oauthLogin.getData("data", new TypeReference<MemberResponseVo>() {
});
log.info("登录成功:用户信息:{}", data.toString());
//2、登录成功跳回首页
return "redirect:http://cfmall.com";
} else {
return "redirect:http://auth.cfmall.com/login.html";
}
} else {
return "redirect:http://auth.cfmall.com/login.html";
}
}
Gitee接口
@Resource
private MemberFeignService memberFeignService;
@GetMapping("/oauth2.0/gitee/success")
public String gitee(@RequestParam("code") String code) throws Exception {
Map<String, String> headers = new HashMap<>();
Map<String, String> querys = new HashMap<>();
querys.put("client_id", "2077705774");
querys.put("client_secret", "40af02bd1c7e435ba6a6e9cd3bf799fd");
querys.put("grant_type", "authorization_code");
querys.put("redirect_uri", "http://auth.cfmall.com/oauth2.0/gitee/success");
querys.put("code", code);
Map<String, String> bodys = new HashMap<>();
HttpResponse response = HttpUtils.doPost("https://gitee.com/", "oauth/token", "post", headers, querys, bodys);
if (response.getStatusLine().getStatusCode() == 200) {
//状态响应码为200则为成功
String json = EntityUtils.toString(response.getEntity());
SocialUser socialUser = JSON.parseObject(json, new TypeReference<SocialUser>() {
});
socialUser.setUuid(UUID.randomUUID().toString());
System.out.println(socialUser);
//知道了哪个社交用户
//1)、当前用户如果是第一次进网站,自动注册进来(为当前社交用户生成一个会员信息,以后这个社交账号就对应指定的会员)
//登录或者注册这个社交用户
System.out.println(socialUser.getAccess_token());
//调用远程服务
R oauthLogin = memberFeignService.oauthLogin(socialUser);
if (oauthLogin.getCode() == 0) {
MemberResponseVo data = oauthLogin.getData("data", new TypeReference<MemberResponseVo>() {
});
log.info("登录成功:用户信息:{}", data.toString());
//2、登录成功跳回首页
return "redirect:http://cfmall.com";
} else {
return "redirect:http://auth.cfmall.com/login.html";
}
} else {
return "redirect:http://auth.cfmall.com/login.html";
}
}
测试
说明:此时页面仍显示“您好,请登录”,页面未做回显,后续章节会完善。