普通登录
Member和auth服务里各放一份vo
@Data
public class UserLoginVo {
private String loginacct;
private String password;
}
@Override
public MemberEntity login(MemberLoginVo memberLoginVo) {
String loginacct = memberLoginVo.getLoginacct();
String password = memberLoginVo.getPassword();
//去数据库查询 loginacct有可能是用户名也有可能是手机号
MemberEntity memberEntity = baseMapper.selectOne(new QueryWrapper<MemberEntity>().eq("mobile", loginacct)
.or().eq("username", loginacct));
//如果实体类不存在就登录失败
if(memberEntity==null){
return null;
}else{
String passwordDB = memberEntity.getPassword();
//密码匹配
BCryptPasswordEncoder bCryptPasswordEncoder = new BCryptPasswordEncoder();
boolean matches = bCryptPasswordEncoder.matches(password, passwordDB);
if(matches){
return memberEntity;
}
return null;
}
}
@PostMapping("/login")
public R login(@RequestBody MemberLoginVo memberLoginVo){
MemberEntity memberEntity=memberService.login(memberLoginVo);
if(memberEntity!=null){
return R.ok();
}else{
return R.error(BizCodeEnum.LOGIN_INVALID_EXCEPTION.getCode(),BizCodeEnum.LOGIN_INVALID_EXCEPTION.getMsg());
}
}
远程调用接口
@PostMapping("/login")
public String login(UserLoginVo vo,RedirectAttributes redirectAttributes){//页面提交过来的数据是key-value,不能用requestBody接受
R login = memberFeignService.login(vo);
Map<String,String> errors=new HashMap<>();
if(login.getCode()==0){
return "redirect:http://gulimall.com";
}else{
//登录失败
errors.put("msg",login.getData("msg",new TypeReference<String>(){}));
redirectAttributes.addFlashAttribute("errors",errors);
return "redirect:http://auth.gulimall.com/login.html";
}
}
社交登录--QQ,微信登录
OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0。
微信:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/WeChat_Login/Development_Guide.html
客户端是
资源拥有者:用户本人
授权服务器:QQ服务器,微信服务器等。返回访问令牌
资源服务器:拿着令牌访问资源服务器看令牌合法性