文章目录

  • ruoyi实现第三方申请
    • 在设置中找到第三方应用进行申请
    • 需要导入的依赖
  • 后端代码
    • com.ruoyi.web.controller.login.GiteeLogin
    • com.ruoyi.framework.web.service.SysLoginService
      • 字段source。如下代码可以获得登录source
      • 新写了一个查询方法
    • ruoyi.web.controller.login.LoginByOtherSourceBody
    • com.ruoyi.framework.config.SecurityConfig
  • 前端代码
    • ruoyi-ui/src/api/login.js
    • ruoyi-ui/src/store/modules/user.js
    • ruoyi-ui/src/permission.js
    • ruoyi-ui/src/views/login.vue
    • ruoyi-ui/src/views/loginByGitee.vue
    • ruoyi-ui/src/api/login.js

ruoyi实现第三方申请

在设置中找到第三方应用进行申请

需要导入的依赖

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!-- 网络请求 --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.6</version></dependency><!-- alibaba的fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.51</version></dependency><dependency><groupId>me.zhyd.oauth</groupId><artifactId>JustAuth</artifactId></dependency><dependency><groupId>com.xkcoding.http</groupId><artifactId>simple-http</artifactId></dependency>

后端代码

com.ruoyi.web.controller.login.GiteeLogin

package com.ruoyi.web.controller.login;import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.framework.web.service.SysLoginService;
import me.zhyd.oauth.config.AuthConfig;
import me.zhyd.oauth.request.AuthGiteeRequest;
import me.zhyd.oauth.request.AuthRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;@RestController
public class GiteeLogin {@Autowiredprivate SysLoginService loginService;@GetMapping("/PreLoginByGitee")public AjaxResult PreLoginByGitee() {AjaxResult ajax = AjaxResult.success();AuthRequest authRequest = new AuthGiteeRequest(AuthConfig.builder().clientId("自己gitee申请的").clientSecret("3自己gitee申请的 ").redirectUri("http://localhost/callback").build());String uuid = IdUtils.fastUUID();String authorizeUrl = authRequest.authorize(uuid);//存储ajax.put("authorizeUrl", authorizeUrl);ajax.put("uuid", uuid);return ajax;}@PostMapping("/loginByGitee")public AjaxResult loginByGitee(@RequestBody LoginByOtherSourceBody loginByOtherSourceBody) {AjaxResult ajax = AjaxResult.success();String token = loginService.loginByOtherSource(loginByOtherSourceBody.getCode(), loginByOtherSourceBody.getSource(), loginByOtherSourceBody.getUuid());ajax.put(Constants.TOKEN, token);return ajax;}}

com.ruoyi.framework.web.service.SysLoginService

public String loginByOtherSource(String code, String source, String uuid) {//先到数据库查询这个人曾经有没有登录过,没有就注册// 创建授权requestAuthRequest authRequest = new AuthGiteeRequest(AuthConfig.builder().clientId("自己gitee申请的").clientSecret("自己gitee申请的").redirectUri("http://localhost/callback").build());AuthResponse<AuthUser> login = authRequest.login(AuthCallback.builder().state(uuid).code(code).build());System.out.println(login);//先查询数据库有没有该用户AuthUser authUser = login.getData();SysUser sysUser = new SysUser();sysUser.setUserName(authUser.getUsername());sysUser.setSource(authUser.getSource());List<SysUser> sysUsers = userService.selectUserListNoDataScope(sysUser);if (sysUsers.size() > 1) {throw new ServiceException("第三方登录异常,账号重叠");} else if (sysUsers.size() == 0) {//相当于注册sysUser.setNickName(authUser.getNickname());sysUser.setAvatar(authUser.getAvatar());sysUser.setEmail(authUser.getEmail());sysUser.setRemark(authUser.getRemark());userService.registerUserAndGetUserId(sysUser);AsyncManager.me().execute(AsyncFactory.recordLogininfor(sysUser.getUserName(), Constants.REGISTER,MessageUtils.message("user.register.success")));} else {sysUser = sysUsers.get(0);}AsyncManager.me().execute(AsyncFactory.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));//注册成功或者是已经存在的用户LoginUser loginUser =new LoginUser(sysUser.getUserId(), sysUser.getDeptId(), sysUser, permissionService.getMenuPermission(sysUser));recordLoginInfo(loginUser.getUserId());// 生成tokenreturn tokenService.createToken(loginUser);}

字段source。如下代码可以获得登录source

source表示登录平台,如微信登录,支付宝登录,因为要确定用户的唯一性。username在不同的平台可能会重复,但是username+source就不会重复了。

AuthUser authUser = login.getData();

新写了一个查询方法

userService.selectUserListNoDataScope(sysUser);
 @Overridepublic List<SysUser> selectUserListNoDataScope(SysUser user) {return userMapper.selectUserList(user);}

新重写一个查询的原因是原来的的方法有数据权限

ruoyi.web.controller.login.LoginByOtherSourceBody

package com.ruoyi.web.controller.login;public class LoginByOtherSourceBody {private String code;private String source;private String uuid;}

com.ruoyi.framework.config.SecurityConfig

安全配置放行了若干接口

.antMatchers("/login", "/register", "/captchaImage", "/loginByGitee", "/PreLoginByGitee").anonymous()

前端代码

ruoyi-ui/src/api/login.js

export function PreLoginByGitee() {return request({url: '/PreLoginByGitee',headers: {isToken: false},method: 'get',})
}export function loginByGitee(code, uuid) {const data = {code,source: "Gitee",uuid}return request({url: '/loginByGitee',headers: {isToken: false},method: 'post',data: data})
}

ruoyi-ui/src/store/modules/user.js

获取Gitee头像展示

import {login, logout, getInfo, loginByGitee} from '@/api/login'// Gitee登录LoginByGitee({commit}, body) {return new Promise((resolve, reject) => {loginByGitee(body.code, body.uuid).then(res => {setToken(res.token)commit('SET_TOKEN', res.token)resolve()}).catch(error => {reject(error)})})},//获取Gitee头像展示let avatar = "";if (user.avatar == "" || user.avatar == null) {avatar = require("@/assets/images/profile.jpg")} else if (user.avatar.startsWith("http")) {avatar = user.avatar} else {avatar = process.env.VUE_APP_BASE_API + user.avatar;}

ruoyi-ui/src/permission.js

前端白名单放行

const whiteList = ['/login', '/auth-redirect', '/bind', '/register' ,'/callback']

ruoyi-ui/src/views/login.vue

     <router-link class="link-type" :to="'/register'">立即注册</router-link></div><div style="width: 32px;height: 32px;margin-top: 5px;cursor: pointer;" title="利用Gitee登录" @click="giteeLogin"><img style="height: 100%;width: 100%;" src="../assets/logo/gitee.png"></div>

methods点击事件

  giteeLogin() {PreLoginByGitee().then(res => {Cookies.set("user-uuid", res.uuid)window.location = res.authorizeUrl})},

ruoyi-ui/src/views/loginByGitee.vue


<template><div v-loading="loading" style="height: 100%;width: 100%;">正在加载中...</div>
</template><script>import Cookies from "js-cookie";export default {name: "loginByGitee",data() {return {loading: true}},mounted() {this.loading = true;console.log("uuid", Cookies.get("user-uuid"))const formBody = {uuid: Cookies.get("user-uuid"),code: this.$route.query.code}this.$store.dispatch("LoginByGitee", formBody).then(() => {this.$router.push({path: this.redirect || "/"}).catch(() => {});}).catch(() => {this.loading = false;});}
}</script><style scoped></style>

ruoyi-ui/src/api/login.js


export function PreLoginByGitee() {return request({url: '/PreLoginByGitee',headers: {isToken: false},method: 'get',})
}export function loginByGitee(code, uuid) {const data = {code,source: "Gitee",uuid}return request({url: '/loginByGitee',headers: {isToken: false},method: 'post',data: data})
}

ruoyi第三方登入Gitee相关推荐

  1. javaweb应用网站实现第三方QQ登入过程

    腾讯开发文档入口 今天实现了web应用第三方QQ登入,由于我当时只看了开发文档中实现登入的流程,没有看SDK中的demo,所以SDK中的工具我没有用到.其实只要知道流程,完全可以不借助它的SDK也能实 ...

  2. Google及Facebook第三方登录问题,“将你登入到此应用时出错,请稍后再试”

    最近项目需求,需要加上Google及Facebook的第三方登录功能.在根据官方文档按步骤完成配置后,在真机上测试正常. Google登录官方指导文档:https://developers.googl ...

  3. 微信wechat.class.php,laravel使用组件实现微信网页授权登入

    laravel框架中的实现简单实现微信网页授权登入 首先引入基于laravel的easywechat的组件,laravel版本5.8 $ cd laravel $ composer require & ...

  4. 微信网页授权登入--laravel组件 laravel-wechat调用

    组件地址:https://github.com/overtrue/laravel-wechat laravel框架中的实现简单实现微信网页授权登入,首先引入基于laravel的easywechat的组 ...

  5. 最最最详细的springboot项目中集成微信扫码登入功能.步骤代码超级详细(OAuth2)

    说到登录注册,就会想到先要注册一个用户名,在进行登入,但是现在大多数的网站都集成了微信登入,不需要注册,给你一个二维码,微信一扫直接登录.这确实是十分便捷的.所以我们会尽量在项目中实现这一功能.减少用 ...

  6. 微信小程序之微信登入

    以下代码基于uni-app编写 如果没有appid,那么uni-login是受限制的 https://open.weixin.qq.com/ 认证商户() 微信登入 不同的应用对于微信登入会做不同的处 ...

  7. [Android]-SDK QQ微信登入

    在Unity中接入大量SDK,对一个零Android开发基础的人来说还是比较蛋疼的.在网上搜了一大堆资料,总算折腾出一个能用的QQ&微信登入SDK. 在QQ互联和微信开放平台注册,并申请相关权 ...

  8. iOS QQ第三方登实现

    iOS QQ第三方登实现 标签: iOSqqsdk第三方登陆 2015-06-09 13:40 26692人阅读 评论(7) 收藏 举报  分类: iOS(120)  版权声明:本文为博主原创文章,未 ...

  9. PC端实现微信扫码登入功能

    微信注册应用 首先需要在微信开放平台进行注册(https://open.weixin.qq.com/),并认证一个网站应用. 注册步骤可参考:https://blog.csdn.net/qq_3601 ...

  10. Springboot集成QQ平台互联授权登入应用

    1.QQ互联文档地址: QQ互联平台文档 注册地址: 个人开发 2.OAuth 2.0 是目前最流行的授权机制,用来授权第三方应用,获取用户数据. OAuth 2.0文档 配置文件模板:() app_ ...

最新文章

  1. PyTorch数据加载处理
  2. ipsec协议(转)
  3. python获取列表中元素的索引
  4. Apache Camel简化SOA实施进程
  5. SAP Spartacus本地启动时的白屏问题分析
  6. mysql mariadb的VC客户端遇到的问题
  7. MVC数据验证原理及自定义ModelValidatorProvider实现无编译修改验证规则和错误信息...
  8. VUE调用高德地图之热力图
  9. android 拼音搜索汉字,android开发之使用拼音搜索汉字
  10. 电脑小鸟壁纸怎么彻底删除?
  11. DateTime转为特定时区时间
  12. 本地与云服务器(阿里云)实现多客户端虚拟局域网搭建
  13. 【Windows】使用Window自带远程桌面远程
  14. 卡通鱼(cartoon fish)
  15. 将平板电脑作为电脑显示器_平板电脑与智能显示器的比较
  16. Postman批量提交
  17. WinCC在C脚本创建电子签名对话框
  18. OLE程序开发利用(开发EXCEL) 之 一
  19. 《网络是怎样连接的》学习(一、浏览器)
  20. Mac上如何安装SketchUp Mac 2023中文激活版 支持13.x,支持 M1/M2、Intel机型,已解决在Ventura 13.x上一直打不开等问题

热门文章

  1. 木兰开源许可证:开源社如是说
  2. 微信网页版扫码登录是如何实现的?
  3. android友盟统计,RN集成友盟统计(Android)
  4. LTE(4G) ATTACH流程
  5. 创业路上之谢谢周爱民
  6. 飓风“桑迪”的蝴蝶效应:扇起桑迪域名注册潮
  7. 基于随机效应贝叶斯神经网络(RE-BNN)的多区域出行模式选择分析
  8. Sliver RecyclerView 功能最强大、最好用的适配器
  9. 电脑鼠标右键应用卡死、转圈圈、资源管理器关闭等问题
  10. 扁豆凝集素LCA/LcH填料/小扁豆凝集素-琼脂糖凝胶/双花扁豆凝集素DBA/黑皮扁豆凝集素